我不确定我是否遗漏了一些东西,但我对此感到困惑。我正在迭代列表并根据条件删除一些元素。当条件满足时,它会跳过下一次迭代。例如:
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]
。我认为发生的情况是它按索引迭代,因此当删除某些内容时,迭代中的当前索引会减少一。有没有办法在不跳过元素的情况下做到这一点?
最佳答案
永远不要改变您正在迭代的容器,直到您真正知道自己在做什么 - 迭代 l[:]
,从 l
中删除。
您对问题的理解是正确的 - for
循环不会直接迭代列表值,更改列表大小会破坏索引。
关于python - 迭代时从列表中删除时会跳过迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54640871/