我不知道我是不是错过了什么,但我对此感到困惑。我正在迭代一个列表,并根据条件删除一些元素。当满足条件时,它将跳过下一次迭代。例如:
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]。我认为正在发生的是按索引迭代,所以当某个东西被移除时,迭代中的当前索引将被关闭一个。有办法做到这一点而不跳过元素吗?
发布于 2019-02-11 23:56:58
永远不要改变你正在迭代的容器,直到你真正知道你在做什么--在l[:]上迭代,从l中删除。
您对问题的理解是- for循环不直接迭代列表值,更改列表大小中断索引。
https://stackoverflow.com/questions/54640871
复制相似问题