在列表中找到int后删除indice - Python

时间:2016-03-04 03:49:30

标签: python list indexof

我有一个脚本可以搜索给定列表中的数字13。如果找到13,则需要将其删除,但我还需要删除它之后的索引。我得到它来找到所有的13并删除它们,但我不确定删除它后的索引的最佳方法。我知道我需要在13之后删除索引,因为删除后的移位。最后,我需要返回所有索引的总和,我已经完成了。

这是我在Codebat.com中所做的一项挑战,它不允许导入。

这就是我所拥有的:

def sum13(nums):
    #Return 0 for empty lists
    if nums == '':
        return 0

    #Find 13s, remove next index and then index of 13
    while(True):
        if 13 in nums:
            #remove the index after 13 here
            nums.remove(13)         
        else:
            break

    #Return the sum of all indices.  
    else:
        return sum(nums)

输入是随机的整数列表,例如:

sum13([13, 1, 2, 13, 2, 1, 13]) # Expected Outcome: 3
sum13([1, 2, 13, 2, 1, 13])     # Expected Outcome: 4

为了获得下一个索引,我在for循环中尝试了nums.index(i + 1)的变体,这只会产生错误,并且一直在试验列表推导和枚举,但是我是那些还不是100%。

2 个答案:

答案 0 :(得分:4)

如果你试图索引过去的列表长度,你会得到错误,但是这可以通过在列表中添加一个额外的元素来规避(在你的情况下它可以为零,因为你是在所有元素的总和之后):

def sum13(nums):
    nums += [0]
    for i in range(len(nums) - 1):
        if nums[i] == 13:
            nums[i] = 0
            nums[i + 1] = 0
    return sum(nums)

如果您要连续考虑多个13,请按相反顺序执行:

    for i in reversed(range(len(nums) - 1)):

答案 1 :(得分:1)

def sum13(nums):
    return (sum13(nums[2:]) if nums[0] == 13 else nums[0] + sum13(nums[1:])) if nums else 0

缺点是它不能连续处理多个13。好处是它没有修改它的论点(一件好事)所以也可以处理只读数据。