【发布时间】:2018-04-02 02:54:18
【问题描述】:
这是一个简单的问题。我的任务是循环一个列表并打印它的每个元素。每次打印后,我也打算从列表中删除这个元素。我的代码是:
>> 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
谁能给我更高级的解释?
【问题讨论】:
-
迭代器跟踪位置,是的。但是你为什么要费心删除每个元素呢?你最终会得到一个空列表。
-
b = list(a)创建列表的副本,因此a和b成为不同的对象。 This 可能有用。 -
This answer 有一个不错的解释。
-
如果您想在修改列表时对其进行迭代,请使用
while循环或为for循环复制列表。 -
可视化您的代码 - codeskulptor.org/viz