在for循环中按索引弹出会留下偶数索引

时间:2019-01-23 21:34:41

标签: python-3.x

很抱歉,以前是否有人问过这个,但我找不到类似的地方。

在python中,我需要弹出一些项目以耗尽列表。

我写了以下内容以了解一些逻辑,但我不明白发生了什么。

我希望for循环可以迭代列表中的每个项目并相应地弹出每个项目。

但是,当我运行以下命令时,它仅弹出for file in **_samename_stillsame/; do #extract portion of the name as e.g., $date cp filename.png "$date".png 索引:odd,而[1, 3, 5, 7, 9]仍然保留even

[2, 4, 6, 8, 10]

我设法通过使用l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] for code in l: l.pop(l.index(code)) print(l) # [2, 4, 6, 8, 10] 循环来完成工作:

while

在这种情况下,为什么l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] while l: for code in l: l.pop(l.index(code)) print(l) # [] 循环仅弹出奇数索引?

1 个答案:

答案 0 :(得分:1)

for item in list命令创建一个临时索引列表(也可能具有步长),该列表保持静态,并且在Python循环执行期间无法更改。因此,indices = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]永久停留。当您在每次迭代中弹出后迭代其余元素时,尽管列表已完全更改,但索引不会更改。

您可以使用while循环来完成此操作,因为它可以迭代地工作直到清空整个列表。下面所示的while循环的各个迭代之后的值证实,每个for循环仅删除奇数元素。

[2, 4, 6, 8, 10] [4, 8] [8] []

for循环中,Python不会考虑对其迭代值所做的更改。