Python 为什么在遍历列表时从列表中删除项目会跳过其他所有项目

Python 为什么在遍历列表时从列表中删除项目会跳过其他所有项目,python,python-3.x,list,foreach,Python,Python 3.x,List,Foreach,当迭代列表并删除每个项目时,为什么会跳过其他所有项目而不删除?(我意识到这样做可能是不好的做法,我只是想了解发生了什么) 预期输出:[] 实际输出:[1,3,5,7,9]这里发生的情况如下: 您可以从以下列表开始: [0,1,2,3,4,5,6,7,8,9] 然后,在for循环的第一次迭代中,获得列表的第一项,即0,并将其从列表中删除。更新后的列表现在如下所示: [1,2,3,4,5,6,7,8,9] 然后,在循环的第二次迭代中,您将获得更新列表中的第二项。在这里,第二项不再是1,而是2(因为您

当迭代列表并删除每个项目时,为什么会跳过其他所有项目而不删除?(我意识到这样做可能是不好的做法,我只是想了解发生了什么)

预期输出:
[]

实际输出:
[1,3,5,7,9]

这里发生的情况如下:

您可以从以下列表开始:
[0,1,2,3,4,5,6,7,8,9]

然后,在for循环的第一次迭代中,获得列表的第一项,即
0
,并将其从列表中删除。更新后的列表现在如下所示:
[1,2,3,4,5,6,7,8,9]

然后,在循环的第二次迭代中,您将获得更新列表中的第二项。在这里,第二项不再是
1
,而是
2
(因为您查看的是更新的列表),因此从列表中删除
2
。更新后的列表现在如下所示:
[1,3,4,5,6,7,8,9]

而且它还在继续。。。直到你得到:
[1,3,5,7,9]

要获得预期的输出,您需要迭代列表的一部分,同时仍然从原始列表中删除项目,如下所示

lst=[0,1,2,3,4,5,6,7,8,9]
for item in lst[:]: # note the `[:]`
    lst.remove(item)
print(lst)
# returns []

另外,您正在迭代一个同时改变的列表,CF @ Tibbles的解释。< /P>这可能是:如果有任何答案都符合您的要求(请参阅Tibbles),请考虑将其标记为正确。一个1的名声就足够了。我提醒你这一点是因为新来者经常忘记这样做。请注意,欢迎加入。

lst=[0,1,2,3,4,5,6,7,8,9]
for item in lst[:]: # note the `[:]`
    lst.remove(item)
print(lst)
# returns []