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