根据条件删除列表的元素

Ank*_*aik 15 python

我有一个元素列表,我想从中删除所有列表中计数小于或等于2的元素.

例如:

A = [['a','b','c'],['b','d'],['c','d','e'],['c','e','f'],['b','c','e','g']]
Run Code Online (Sandbox Code Playgroud)

我想删除'a','d','f','g'A而在其余的存储B,这样名单就变成了:

B = [['b','c'],['b'],['c','e'],['c','e'],['b','c','e']]
Run Code Online (Sandbox Code Playgroud)

我创建了一个字典,它将存储所有元素的数量,并根据我想要删除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]
Run Code Online (Sandbox Code Playgroud)

Aja*_*234 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]
Run Code Online (Sandbox Code Playgroud)

输出:

[['b', 'c'], ['b'], ['c', 'e'], ['c', 'e'], ['b', 'c', 'e']]
Run Code Online (Sandbox Code Playgroud)

  • 对于一个变化,这是一个非常好的答案,我已经对它进行了投票.作为改进,考虑使用`chain.from_iterable(A)`而不是`chain(*A)`,因为前者更有效. (3认同)