Python列表元素删除逻辑错误?

时间:2011-10-25 18:38:15

标签: python python-3.x

  

可能重复:
  Removing from a list while iterating over it

我有这段代码:

s = [2,3,4,5]

for i in s:
  s.remove(i)

print(s) 

当我运行它时,结果是:

[3,5]

这里有什么逻辑错误?

3 个答案:

答案 0 :(得分:2)

您正在修改它时迭代列表,这会导致您的问题。

创建一个临时列表(list(s)),您可以迭代并根据需要修改原始列表:

>>> s = [2,3,4,5]
>>>
>>> for i in list(s):
...   s.remove(i)
... 
>>> print(s)
[]

答案 1 :(得分:0)

逻辑错误是在迭代同一列表时从列表中删除元素。

Python当然隐藏了一些实现细节。在内部,您删除第一个项目,离开[3,4,5]。然后删除第二项,离开[3,5]。此时,您已从一个只有两个项目的列表中删除了两个项目,因此您已完成。

答案 2 :(得分:0)

这是因为迭代器。请考虑以下代码段:

s = [2,3,4,5]

for i in s:
    print "i",i
    j = s
    print "j", j
    s.remove(i)
    print "removed"
    print "j", j
    print "s", s

print s

输出为

i 2
j [2, 3, 4, 5]
removed
j [3, 4, 5]
s [3, 4, 5]
i 4
j [3, 4, 5]
removed
j [3, 5]
s [3, 5]
[3, 5]

基本上,当你执行for循环时,内部迭代器转到s [0],然后是s [1]等。当循环的下一轮执行时,s [1]已经是4而不是3因为s本身已被修改。