我正在尝试使用以下代码从列表中删除项目:
lst = [1, 0, 0, 0, 1, 0, 0, 1]
for i in lst:
lst = lst.remove(i)
print lst
但它会出错。有人可以帮我理解问题是什么吗?
答案 0 :(得分:3)
问题是list.remove
会返回None
,因此当您设置lst = lst.remove(i)
时,您将lst
替换为None
,因此在下一次迭代时,您将尝试将remove
应用于None
,这是不可能的。删除分配,您不会再出错;
>>> for i in lst:
... lst.remove(i)
... print lst
...
[0, 0, 0, 1, 0, 0, 1]
[0, 0, 1, 0, 0, 1]
[0, 0, 0, 0, 1]
[0, 0, 0, 1]
请注意,如果在以这种方式删除时迭代列表,则实际上正在跳过其他所有元素,这就是上面的循环似乎过早结束的原因:
>>> lst = [1, 2, 3, 4, 5, 6, 7, 8]
>>> for i in lst:
... lst.remove(i)
... print(lst)
...
[2, 3, 4, 5, 6, 7, 8]
[2, 4, 5, 6, 7, 8]
[2, 4, 6, 7, 8]
[2, 4, 6, 8]
答案 1 :(得分:0)