根据条件删除列表的元素

时间:2018-05-02 10:39:35

标签: python

我有一个元素列表,我想从中删除所有列表中计数小于或等于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']]

我创建了一个字典,它将存储所有元素的数量,并根据我想要删除count小于或等于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]

2 个答案:

答案 0 :(得分:13)

您可以使用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']]

答案 1 :(得分:4)

词典中添加新的之前,您必须检查键是否存在。如果没有,只需将添加到词典即可。否则,请更新密钥的值。

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']]