遍历列表和删除python中的元素时的奇怪行为

时间:2018-07-02 08:50:48

标签: python loops

我正在尝试遍历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]

有人知道为什么会这样吗?只有偶数元素被删除,并且看起来循环没有穿过不均匀的元素。

4 个答案:

答案 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循环。或者,记录要删除的所有元素的索引,然后在迭代完成后将其删除