迭代时从列表中删除时,迭代会被跳过

时间:2019-02-11 23:54:02

标签: python list

我不确定是否要丢失一些东西,但是对此我感到困惑。我正在遍历一个列表,并根据条件删除了一些元素。满足条件时,将跳过下一个迭代。例如:

l = [1,1,2,3,1]
for i in l:
    print(f'checking {i} in {l}')
    if i == 1:
        print(f'removing')
        l.remove(i)

然后返回

checking 1 in [1, 1, 2, 3, 1]
removing
checking 2 in [1, 2, 3, 1]
checking 3 in [1, 2, 3, 1]
checking 1 in [1, 2, 3, 1]
removing

然后是l=[2,3,1]。我认为正在发生的事情是按索引进行迭代,因此当删除某些内容时,迭代中的当前索引将减少一个。有没有一种方法可以不跳过元素?

1 个答案:

答案 0 :(得分:1)

在您真正知道自己在做什么之前,切勿对容器进行迭代,直到对l[:]进行迭代,然后从l中删除。

您对问题的了解指向– for循环不会直接遍历列表值,更改列表大小会破坏索引编制。