Python列表并删除一个变量

Python列表并删除一个变量,python,python-2.7,Python,Python 2.7,我是编程新手。我试图理解python中不同的数据结构。在我尝试的列表中: mylist = [1,2,1,2,1,2,3,4,5,1,2,3] print mylist mylist.remove(2) print mylist 它应该从列表中删除2个。只有第一个。 输出如下所示: [1, 2, 1, 2, 1, 2, 3, 4, 5, 1, 2, 3] [1, 1, 2, 1, 2, 3, 4, 5, 1, 2, 3] 如何删除所有匹配项?您可以使用 或者简单的列表理解 my_list

我是编程新手。我试图理解python中不同的数据结构。在我尝试的列表中:

mylist = [1,2,1,2,1,2,3,4,5,1,2,3]
print mylist
mylist.remove(2)
print mylist
它应该从列表中删除2个。只有第一个。 输出如下所示:

[1, 2, 1, 2, 1, 2, 3, 4, 5, 1, 2, 3]
[1, 1, 2, 1, 2, 3, 4, 5, 1, 2, 3]
如何删除所有匹配项?

您可以使用

或者简单的列表理解

my_list = [i for i in my_list if i!=2]
您甚至可以使用
remove()
执行以下操作以获得正确的结果:

>>> while True:
...     try:
...         mylist.remove(2)
...     except:
...         break
... 
>>> mylist
[1, 1, 1, 3, 4, 5, 1, 3]
mylist = [number for number in mylist if number != 2]
但是,这是丑陋的,并且经常导致意外的行为。您不应该在迭代时修改列表

mylist = [x for x in mylist if x != 2]

这比过滤器更简单。

使用列表理解可能是实现这一点的最有效的方法:

>>> while True:
...     try:
...         mylist.remove(2)
...     except:
...         break
... 
>>> mylist
[1, 1, 1, 3, 4, 5, 1, 3]
mylist = [number for number in mylist if number != 2]
这是因为
list.remove(x)
只删除列表中第一次出现的
x
。上述解决方案将基于
mylist
创建一个新列表,该列表将包含
mylist
的所有元素,如果它们不等于2。

,则预期会出现此行为:

列表。删除(x)

从列表中删除值为x的第一项。如果没有此类项目,则为错误

要从列表中删除所有出现的值,可以使用列表理解:

seq = [1,2,1,2,1,2,3,4,5,1,2,3]
seq = [value for value in seq in value != 2]
mylist = [x for x in mylist if x != 2]
从python帮助:

help(list.remove)
你可以得到这样的解释:

L.remove(值)--删除第一次出现的值。 如果值不存在,则引发ValueError

您可以通过使用列表理解来实现:

seq = [1,2,1,2,1,2,3,4,5,1,2,3]
seq = [value for value in seq in value != 2]
mylist = [x for x in mylist if x != 2]
它只是根据您的条件创建一个新列表。

另一种方法(如果您不创建新列表):


谢谢大家。列表理解似乎是适合我的。但我不知道我应该选择哪一个作为答案。谢谢你们的回答。可能是重复的,但它几乎是更清楚的问题和答案。