Удаление элементов списка на основе условия
У меня есть список элементов, из которых я хочу удалить те элементы, чей счет меньше или равен 2 во всем списке.
Например:
A = [['a','b','c'],['b','d'],['c','d','e'],['c','e','f'],['b','c','e','g']]
Я хочу удалить 'a'
, 'd'
, 'f'
, 'g'
из A
и сохранить остальные в B
чтобы список стал:
B = [['b','c'],['b'],['c','e'],['c','e'],['b','c','e']]
Я создал словарь, который будет хранить все количество элементов и на основе этого я хочу удалить элементы со счетом меньше или равным 2.
Ниже приведен код, который я написал до сих пор.
for i in range(len(A)):
for words in A[i]:
word_count[words] +=1
B = [A[i] for i in range(len(A)) if word_count[words]<2]
Ответы
Ответ 1
Вы можете использовать collections.Counter
:
from collections import Counter
import itertools
A = [['a','b','c'],['b','d'],['c','d','e'],['c','e','f'],['b','c','e','g']]
c = Counter(itertools.chain(*A))
new_a = [[b for b in i if c[b] > 2] for i in A]
Выход:
[['b', 'c'], ['b'], ['c', 'e'], ['c', 'e'], ['b', 'c', 'e']]
Ответ 2
Перед тем, как добавить новый ключ в словарь, вы должны проверить, если ключ существует. Если нет, просто добавьте ключ в словарь. В противном случае обновите значение ключа.
A = [['a','b','c'],['b','d'],['c','d','e'],['c','e','f'],['b','c','e','g']]
word_count = {}
for i in range(len(A)):
for words in A[i]:
if words not in word_count:
word_count[words] = 0
word_count[words] += 1
Затем отфильтруйте исходный список, используя созданный словарь.
B = [[x for x in A[i] if word_count[x] > 2] for i in range(len(A))]
print(B)
Выход
[['b', 'c'], ['b'], ['c', 'e'], ['c', 'e'], ['b', 'c', 'e']]