Как удалить элемент из всех списков в списке списков? - PullRequest
0 голосов
/ 03 июня 2019

Предположим, у меня есть список списков.

L = [[1,2,3], ['a',2,True],[1,44,33,12.1,90,2]]

Я хочу иметь возможность удалить все экземпляры определенного элемента из каждого из подсписков в списке L.

Итакнапример, я мог бы хотеть удалить число 2 так, чтобы это произвело

L = [[1,3], ['a',True],[1,44,33,12.1,90]]

Я попытался использовать эту функцию + код:

def remove_values_from_list(the_list, val):
    return [value for value in the_list if value != val]

for i in L:
    i = remove_values_from_list(i, '2')

Однако вывод все еще дает L в своем оригиналеформа и не удаляет 2.

Ответы [ 2 ]

4 голосов
/ 03 июня 2019

i - это переменная, которая не связана с L. Ему присваивается значение от L, затем вы переназначаете его на что-то другое; это никак не повлияет на L.

Неразрушающий способ сделать это (т.е. сохранить L, создать новый список для результата):

newL = [[value for value in the_list if value != val] for the_list in L]

Деструктивный путь (то есть изменение L самого себя):

for the_list in L:
    while value in the_list:
        the_list.remove(value)
0 голосов
/ 03 июня 2019

Попробуйте:

def remove_values_from_list(the_list, val):
    return [[v for v in l1 if v!= val] for l1 in the_list]

В своем коде вы проверяли, эквивалентен ли только один подсписок параметру val.Вы должны проверить это внутри подсписков.Также вторичной ошибкой будет проверка элементов внутри подсписков с точным типом.Вы ищете '2' (тип str), где в подсписках есть 2 (тип int).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...