我有这段代码:
s = [2,3,4,5]
for i in s:
s.remove(i)
print(s)
当我运行它时,结果是:
[3,5]
这里有什么逻辑错误?
答案 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本身已被修改。