我不确定是否要丢失一些东西,但是对此我感到困惑。我正在遍历一个列表,并根据条件删除了一些元素。满足条件时,将跳过下一个迭代。例如:
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]
。我认为正在发生的事情是按索引进行迭代,因此当删除某些内容时,迭代中的当前索引将减少一个。有没有一种方法可以不跳过元素?
答案 0 :(得分:1)
在您真正知道自己在做什么之前,切勿对容器进行迭代,直到对l[:]
进行迭代,然后从l
中删除。
您对问题的了解指向– for
循环不会直接遍历列表值,更改列表大小会破坏索引编制。