3

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

所以基本上我有 2 个列表(a 和 b),它们组合在另一个列表(c)中

a= ["aa","bb"]
b= ["aa","dd"]
c=[a,b]

现在我正在尝试删除所有名为“aa”的元素

c.remove("aa")

可悲的是,这不起作用,我收到错误“ ValueError: list.remove(x): x not in list ”,因为 c 中没有字面上提到“aa”。

最后,我还想打印出 c 中的所有列表及其包含的内容。像这样的东西:

c= a: bb, b: dd
  • 有没有办法用一个命令删除多个列表中的元素,就像我尝试将它们组合到另一个列表 c 中一样?

  • 我怎样才能打印出类似于我上面描述的列表 c 呢?

4

4 回答 4

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循环中只会删除每个子列表中的第一次出现。

于 2018-12-20T00:16:53.317 回答
1

您需要遍历list. list c例如

>>> a = ["aa", "bb"]
>>> b = ["aa", "dd"]
>>> c = [a, b]
>>> for i in c:
...   i.remove("aa")
... 
>>> c
[['bb'], ['dd']]
>>> 
于 2018-12-20T00:15:42.293 回答
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']}
于 2018-12-20T00:16:36.947 回答
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]

输出 = [['bb', 'cc'], ['dd']]

于 2018-12-20T01:20:27.303 回答