繁体   English   中英

Python列出并删除变量

[英]Python List and remove a variable

我是编程新手。 我试图理解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]

如何删除所有匹配项?

您可以使用过滤器

>>> mylist = [1,2,1,2,1,2,3,4,5,1,2,3]
>>> filter(lambda x:x!=2, mylist)
[1, 1, 1, 3, 4, 5, 1, 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 = [x for x in mylist if x != 2]

这比过滤器简单。

使用列表理解可能是执行此操作的最有效的方法:

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

这是因为list.remove(x)仅删除列表中第一次出现的x 上面的解决方案将基于mylist创建一个新列表,如果它们不等于2,则将包含mylist所有元素。

根据docs ,此行为是预期的:

list.remove(x)

从列表中删除值为x的第一项 如果没有这样的项目,那就是错误的。

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

seq = [1,2,1,2,1,2,3,4,5,1,2,3]
seq = [value for value in seq in value != 2]

从python帮助中:

help(list.remove)

您可以得到以下解释:

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

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

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

它只是根据您的条件创建一个新列表。

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

while 2 in mylist:
    mylist.remove(2)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM