如果之前已经有人问过了,我很抱歉,但我找不到任何类似的东西。
在python中,我需要弹出一些项目来穷尽列表。
我写了以下内容来理解一些逻辑,但我不明白到底是怎么回事。
我期望一个for循环迭代列表中的每一项,并相应地弹出每一项。
但是,当我运行以下命令时,它只弹出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) # []为什么在这种情况下for循环只弹出奇数索引?
发布于 2019-01-24 05:54:32
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不会考虑在它迭代的值中所做的更改。
https://stackoverflow.com/questions/54336019
复制相似问题