我正在尝试遍历Python列表,并在完成一些任务后删除每个元素,但是每次迭代后它都会跳一个元素,我不知道为什么:
>>> simple_list = list(range(10))
>>> simple_list
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> for i in simple_list:
... print(i)
... simple_list.remove(i)
...
0
2
4
6
8
>>> simple_list
[1, 3, 5, 7, 9]
有人知道为什么会这样吗?只有偶数元素被删除,并且看起来循环没有穿过不均匀的元素。
答案 0 :(得分:2)
好吧,当您遍历列表时,列表正在缩小。如果需要的话,只需遍历第一个元素即可。
while len(simple_list) > 0:
print(simple_list[0])
del simple_list[0]
答案 1 :(得分:1)
您可以使用列表推导获取数组的副本,然后进行迭代。
simple_list = list(range(10))
for i in simple_list[:]:
print(i)
simple_list.remove(i)
答案 2 :(得分:1)
或者这个:
for i in simple_list[:]:
simple_list.remove(i)
print(simple_list)
输出:
[]
答案 3 :(得分:0)
好的,在这里找到答案:Python: Removing list element while iterating over list
在for循环中遍历元素时,切勿从列表中删除元素。您可以改用while循环。或者,记录要删除的所有元素的索引,然后在迭代完成后将其删除