我试图找到一种方法来检查包含特定元素的其他几个列表的列表,并将其删除。
所以基本上我有2个列表(a和b),这些列表合并在另一个列表(c)中
a= ["aa","bb"]
b= ["aa","dd"]
c=[a,b]
现在我正在尝试删除所有名为“ aa”的元素
c.remove("aa")
不幸的是,这行不通,并且出现错误“ ValueError:list.remove(x):x不在列表中”,因为在c中没有真正提到“ aa”。
最后,我还想打印出c中的所有列表及其包含的内容。像这样:
c= a: bb, b: dd
是否有一种方法可以通过单个命令删除多个列表中的元素,就像我尝试将它们组合到另一个列表c中一样?
又如何像上面描述的那样最终打印出列表c?
答案 0 :(得分:4)
您可以使用列表理解:
a = ['aa', 'bb']
b = ['aa', 'dd']
c = [a, b]
c = [[x for x in sublist if x != 'aa'] for sublist in c]
此解决方案将删除所有 'aa'
个元素,而常规list.remove('aa')
循环中的for
仅删除 first 在每个子列表中。
答案 1 :(得分:1)
您需要遍历list
list
中的各个c
。例如
>>> a = ["aa", "bb"]
>>> b = ["aa", "dd"]
>>> c = [a, b]
>>> for i in c:
... i.remove("aa")
...
>>> c
[['bb'], ['dd']]
>>>
答案 2 :(得分:1)
您所需的输出看起来像字典。您可以使用dict理解来创建它,例如:
a= ["aa","bb"]
b= ["aa","dd"]
mylist_names = ['a','b']
c={name:[x for x in vals if x!='aa'] for name, vals in zip(mylist_names, [a,b])}
>>> c
{'a': ['bb'], 'b': ['dd']}
答案 3 :(得分:0)
如果您不介意使用numpy
import numpy as np
a= ["aa","bb",'cc']
b= ["aa","dd", 'kk']
c= np.asarray([a,b])
to_remove = ['aa']
c = [x[~np.isin(x,to_remove)].tolist() for x in c]
输出= [['bb','cc'],['dd','kk']]
应该满足您需要的所有内容,包括要删除的多个项目。
import numpy as np
a= ["aa","bb",'cc']
b= ["aa","dd", 'kk']
c= np.asarray([a,b])
to_remove = ['aa', 'kk']
c = [x[~np.isin(x,to_remove)].tolist() for x in c]
output = [[''bb','cc'],['dd']]