Как удалить все вхождения элемента из списка в Python? - PullRequest
2 голосов
/ 17 марта 2020
ls = [[1], [1, 2], [1, 2, 3], [], [2], [2, 3], [], [], [3]]

Существует ли какой-либо метод списка python, который позволит мне удалить все подобные элементы одновременно. Например, у меня есть двумерный список «ls», в котором есть три пустых элемента списка []. Я хочу удалить все пустые элементы списка одновременно. Я знаю, что это можно сделать с помощью 'remove' и 'l oop.' Но есть ли способ сделать операцию сразу? Проще говоря: я хочу, чтобы все '[]' были удалены. И поэтому ответ будет таким: [[1], [1, 2], [1, 2, 3], [2], [2, 3], [3]]

Ответы [ 6 ]

1 голос
/ 17 марта 2020

Не существует метода remove_all или чего-либо подобного, но лучшие способы сделать это sh - это использовать понимание списка или filter.

Предполагая, что ls содержит только другие списки Вы можете написать следующее, чтобы удалить все вхождения пустого списка []:

Понимание списка

ls = [[1], [1, 2], [1, 2, 3], [], [2], [2, 3], [], [], [3]]
ls = [x for x in ls if x]
# now ls =  [[1], [1, 2], [1, 2, 3], [2], [2, 3], [3]]

Фильтр

ls = [[1], [1, 2], [1, 2, 3], [], [2], [2, 3], [], [], [3]]
ls = list(filter(None, ls))
# now ls =  [[1], [1, 2], [1, 2, 3], [2], [2, 3], [3]]

Обобщение для большего, чем просто пустой список

Если вы хотите удалить все вхождения данного элемента elem (это не пустой список), вы можете изменить приведенный выше код следующим образом:

ls = [x for x in ls if x != elem]

##### or #####

ls = list(filter(lambda x: x != elem, ls))
0 голосов
/ 17 марта 2020

вы можете использовать collections.Counter со встроенной функцией filter:

from collections import Counter

count = Counter(map(str, ls))
ls = list(filter(lambda x: count[str(x)] == 1, ls))
ls

выход:

[[1], [1, 2], [1, 2, 3], [2], [2, 3], [3]]
0 голосов
/ 17 марта 2020

Вы можете попробовать следующие подходы:

1)

l = [x for x in ls if x != []]

или

l = [x for x in ls if x]

2)

l = filter(None, ls)
0 голосов
/ 17 марта 2020

Вы можете использовать filter здесь, чтобы удалить все списки [] и сохранить порядок.

list(filter(None,ls))
# [[1], [1, 2], [1, 2, 3], [2], [2, 3], [3]]

Понимание списка выше будет

[lst for lst in ls if lst]
# [[1], [1, 2], [1, 2, 3], [2], [2, 3], [3]]
0 голосов
/ 17 марта 2020

Вы можете сделать что-то вроде этого. Но это конкретно c для этого случая:

ls = [[1], [1, 2], [1, 2, 3], [], [2], [2, 3], [], [], [3]]
[l for l in ls if len(l)!=0]
0 голосов
/ 17 марта 2020

Объект set - это неупорядоченная коллекция различных объектов hashable. Обычное использование включает тестирование членства, удаление дубликатов из последовательности и вычисление математических операций, таких как пересечение, объединение, разность и симметрия c разность. (Другие контейнеры см. Во встроенных классах dict, list, tuple и модуле коллекций.)

https://docs.python.org/3.8/library/stdtypes.html#set -types-set-frozenset

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