python – 根据特定值删除List中的索引

我想解决以下问题:

返回数组中数字的总和,返回0表示空数组.除了数字13是非常不吉利的,因此它不计算在13之后立即出现的数字也不计算.

这就是我所拥有的,这里的想法是13和1(在它之后)被删除然后剩下的数字相加.我遇到的问题是删除部分,实际上并没有删除任何内容.这是语法问题吗?

x = [1,2,2,1,13,1]

def sum13(nums):
    for i in nums:
        if i == 13:
            del nums[i:i+1]
    return sum(nums)

print(sum13(x))

20 <-- should be 6

最佳答案 你的问题与索引有关.我是列表中的数字,而不是索引.

这是解决问题的方法:

x = [1,2,2,1,13,1]

def sum13(nums):
    for i, num in enumerate(nums):
        if num == 13:
            del nums[i:i+2] # This removes the index i and the index i+1
    return sum(nums)

print(sum13(x))
>>> 6

编辑:
正如Thierry Lathuille在评论中提到的那样,这并没有充分说明你重复’13’的情况.假设您想要这种行为,这里有一种方法可以做到:

def sum13(nums):
    for i, num in enumerate(nums):
        if num == 13:
            stop_cut = i + 1     
            while nums[stop_cut] == 13:
                stop_cut += 1
            del nums[i:stop_cut+1]
    return sum(nums)
点赞