从列表中移除所有值的出现?

545 投票
26 回答
851337 浏览
提问于 2025-04-15 13:02

在Python中,remove()这个方法会删除列表中第一次出现的某个值。

那么,怎么才能删除列表中某个值的所有出现呢?

我想到的是这个:

>>> remove_values_from_list([1, 2, 3, 4, 2, 2, 3], 2)
[1, 3, 4, 3]

26 个回答

146

如果你需要修改原来的列表,可以使用切片赋值,同时还可以利用高效的列表推导式(或者生成器表达式)。

>>> x = [1, 2, 3, 4, 2, 2, 3]
>>> x[:] = (value for value in x if value != 2)
>>> x
[1, 3, 4, 3]
286

你可以使用列表推导式:

def remove_values_from_list(the_list, val):
   return [value for value in the_list if value != val]

x = [1, 2, 3, 4, 2, 2, 3]
x = remove_values_from_list(x, 2)
print x
# [1, 3, 4, 3]
712

函数式编程的方法:

Python 3.x版本

>>> x = [1,2,3,2,2,2,3,4]
>>> list(filter((2).__ne__, x))
[1, 3, 3, 4]

或者

>>> x = [1,2,3,2,2,2,3,4]
>>> list(filter(lambda a: a != 2, x))
[1, 3, 3, 4]

或者

>>> [i for i in x if i != 2]

Python 2.x版本

>>> x = [1,2,3,2,2,2,3,4]
>>> filter(lambda a: a != 2, x)
[1, 3, 3, 4]

撰写回答