[英]Remove Variable(s) in List A if Variable(s) is/are in List B, 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.