有人可以解释为什么此for循环正常工作吗?

时间:2019-03-27 22:48:23

标签: python python-3.x

我创建了一个for循环,用于计算列表的总和,但整数13和其后的整数除外。我的循环有效,但我不知道为什么,有人可以帮助解释吗?

我尝试打印循环的各个部分以了解其功能。它成功地从总和中删除了13个,但我不明白为什么2个也被跳过了。

    nums = [5, 13, 2]

    def sum13(nums):
        i = 0
        for elem in nums:
            if elem != 13:
                i = i + elem
            else:
                nums.remove(elem)
        return i

3 个答案:

答案 0 :(得分:1)

如果不是13,则没有理由真正删除该值,您可以跳过它。

def sum13(nums):
    i = 0
    skip = False
    for elem in nums:
        if elem != 13 and not skip:
            i = i + elem
        else:
            if skip:
                skip = False # Stop skipping
            else:
                skip = True
    return i

然后sum13([5, 13, 2, 1])将返回6

答案 1 :(得分:1)

执行此操作的更好方法是使nums为显式迭代器,并在找到{{1}时使用next消耗其中的值(应跳过的下一个值)。 }}。

13

答案 2 :(得分:0)

您的代码“有效”是因为您缩短了列表,因此循环中从未“看到” 2。不要修改您迭代过的列表。

会发生什么情况:您遍历[5, 13, 2]

1st value is 5, 5 is not 13 so it is added
2nd value is 13 and not added, you delete 13 from your list - it becomes [5,2]
3rd value ... is no longer there, list is only 2 long, loop never looks at 2

这是一个常见的误解,请参见f.e.我两天前的answer


您可以记住是否需要跳过数字:

def sum13(l):
    skip=False
    s = 0
    for i in l:
        if i==13:
            skip = True
        elif skip:
            skip = False
        else:
            s += i
    return s



print(sum13([5, 13, 2, 21]))  # 26