Python:在循环列表时删除列表中的元素

时间:2017-10-20 21:20:18

标签: python list

这是一个简单的问题。我的任务是循环一个列表并打印它拥有的每个元素。每次打印后,我打算也从列表中删除这个元素。我的代码是:

>> a = [1,2]
>> for x in a:
>>   print x
>>   a.remove(x)
>>   print a

输出结果为:

>> 1
>> [2]

然而,这里发生了一些奇怪的事情: 只打印了1,从列表中删除1后,程序似乎直接跳出循环。我的假设是在更改列表的内容之后,迭代器也可能会受到影响,但我不太确定。更安全的方法是:

>> a = [1,2]
>> b = list(a)
>> for x in b:
>>   print x
>>   a.remove(x)
>>   print a

有人可以提供更高级的解释吗?

2 个答案:

答案 0 :(得分:2)

a = [1,2]
while a:
    print a.pop(0)
    print a

答案 1 :(得分:0)

您不应从使用for迭代的列表中删除元素。

您的猜测很接近 - 如果您使用更长的列表,您可以更清楚地看到发生了什么:

a = [1,2,3,4,5]
for x in a:
    print x
    a.remove(x)
    print a

输出:

1
[2, 3, 4, 5]
3
[2, 4, 5]
5
[2, 4]

它在索引0打印元素,然后索引1,然后索引2 ...然后没有索引3.

在您的示例中,它在索引1处打印元素,然后没有索引2.