如何在列表的组合列表中删除列表的特定元素?

时间:2018-12-20 00:07:06

标签: python arrays python-3.x list

我试图找到一种方法来检查包含特定元素的其他几个列表的列表,并将其删除。

所以基本上我有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?

4 个答案:

答案 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']]