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

Python列表元素删除逻辑错误?,python,python-3.x,Python,Python 3.x,可能重复: 我有以下代码: s = [2,3,4,5] for i in s: s.remove(i) print(s) 当我运行它时,结果是: [3,5] 这里的逻辑错误是什么?逻辑错误是在遍历同一列表时从列表中删除元素 当然,Python隐藏了一些实现细节。在内部,删除第一项,留下[3,4,5]。然后删除第二项,留下[3,5]。此时,您已经从只有两个项目的列表中删除了两个项目,因此您已经完成了。您在修改列表时正在对列表进行迭代,这导致了您的问题 制作一个临时列表(列表)),您

可能重复:

我有以下代码:

s = [2,3,4,5]

for i in s:
  s.remove(i)

print(s) 
当我运行它时,结果是:

[3,5]

这里的逻辑错误是什么?

逻辑错误是在遍历同一列表时从列表中删除元素


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

您在修改列表时正在对列表进行迭代,这导致了您的问题

制作一个临时列表(
列表)
),您可以反复查看并根据需要修改原始列表:

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

这是因为迭代器。考虑这个代码段:

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本身已被修改