Как я могу удалить определенный элемент списка в комбинированном списке списков? - PullRequest
0 голосов
/ 20 декабря 2018

Я пытаюсь найти способ проверить список, который содержит несколько других списков для определенного элемента, и удалить его.

Так что в основном у меня есть 2 списка (a и b), которые объединены в другом списке(c)

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

Теперь я пытаюсь удалить все элементы с именем "aa"

c.remove("aa")

К сожалению, это не работает, и я получаю ошибку " ValueError:list.remove (x): x отсутствует в списке", потому что" aa "буквально не упоминается в c.

В конце я также хочу распечатать все списки в c и что они содержат,Примерно так:

c= a: bb, b: dd
  • Есть ли способ удалить элементы в нескольких списках одной командой, как я пытался скомбинировать их в другом списке c?

  • А как мне распечатать список c в конце, как я описал его выше?

Ответы [ 4 ]

0 голосов
/ 20 декабря 2018

Если вы не возражаете против использования 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]

output = [['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']]

0 голосов
/ 20 декабря 2018

Ваш желаемый вывод выглядит как словарь.Вы можете создать это, используя словесное понимание:

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']}
0 голосов
/ 20 декабря 2018

Вы можете использовать понимание списка:

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 удалит только первое вхождение в каждом подсписке.

0 голосов
/ 20 декабря 2018

Вам нужно будет выполнить итерацию по отдельным list s в list c.Например

>>> a = ["aa", "bb"]
>>> b = ["aa", "dd"]
>>> c = [a, b]
>>> for i in c:
...   i.remove("aa")
... 
>>> c
[['bb'], ['dd']]
>>> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...