这是一个简单的问题。我的任务是循环一个列表并打印它拥有的每个元素。每次打印后,我打算也从列表中删除这个元素。我的代码是:
>> 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
有人可以提供更高级的解释吗?
答案 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.