如何删除列表中重复小于k的项目

POK*_*OKO 0 python counter list

在python列表中,我想删除重复小于'k'的所有元素.例如,如果k == 3那么我们的列表是:

l = [a,b,c,c,c,a,d,e,e,d,d]
Run Code Online (Sandbox Code Playgroud)

然后输出必须是:

[c,c,c,d,d,d]
Run Code Online (Sandbox Code Playgroud)

什么是快速的方法(我的数据很大),任何好的pythonic建议?

这是我编码的,但我不认为它是最快和最pythonic的方式:

from collections import Counter

l = ['a', 'b', 'c', 'c', 'c', 'a', 'd', 'e', 'e', 'd', 'd']

counted = Counter(l)

temp = []
for i in counted:
    if counted[i] < 3:
        temp.append(i)

new_l = []
for i in l:
    if i not in temp:
        new_l.append(i)

print(new_l)
Run Code Online (Sandbox Code Playgroud)

jpp*_*jpp 5

您可以使用collections.Counter构造字典将值映射到计数.然后使用列表推导来筛选大于指定值的计数.

from collections import Counter

L = list('abcccadeedd')
c = Counter(L)
res = [x for x in L if c[x] >=3]

# ['c', 'c', 'c', 'd', 'd', 'd']
Run Code Online (Sandbox Code Playgroud)