首页 > 解决方案 > 如何使用列表切片来完成此操作?

问题描述

SUMMER OF '69:返回数组中数字的总和,除了忽略以 6 开头并延伸到下一个 9 的数字部分(每个 6 后面至少有一个 9)。如果没有数字,则返回 0。

    summer_69([1, 3, 5]) --> 9
    summer_69([4, 5, 6, 7, 8, 9]) --> 9 
    summer_69([2, 1, 6, 9, 11]) --> 14

这就是问题。我一直在尝试使用列表切片来解决这个问题,但一直无法解决。注意:9 只能在 6 之后,不能在 6 之前。

这就是我的逻辑 - 我找到了 6 的索引并将其分配给一个变量,我找到了 9 的变量并为其分配了一个变量。其他两个条件都满足了,但是无论我尝试什么,都不能满足 9 的条件。

这是我这边的一些代码。请原谅我糟糕的编程技巧。

def summer_69(arr):
    if 6 not in arr:
        return sum(arr)
    elif 6 and 9 in arr:
        i = arr.index(6)
        y = arr.index(9)
        sxy = sum(arr[i:y])
        return sum(arr) - sxy
    else:
        i = arr.index(6)
        return sum(arr[:i])

对于数组 [4, 5, 6, 7, 8, 9] 我得到输出 18。

标签: pythonlist

解决方案


无需切片即可完成。

def summer_69(l):
    sign, count = False, 0
    for num in l:
        if num == 6:
            sign = True
        if not sign:
            count += num
        if num == 9:
            sign = False
    return count

推荐阅读