从Python中删除列表中的项目

时间:2016-11-29 20:36:21

标签: python-2.7 list

我正在尝试使用以下代码从列表中删除项目:

lst = [1, 0, 0, 0, 1, 0, 0, 1] 
for i in lst:
    lst = lst.remove(i)
    print lst

但它会出错。有人可以帮我理解问题是什么吗?

2 个答案:

答案 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)

如果要从列表中删除特定值而不是索引,则使用

remove函数。 如果要按索引使用

从列表中删除项目
  

lst.pop(I)。

Link to documentation