如何编写代码以返回将N次出现的所有元素都删除的列表?
我正在尝试编写一个python函数plicate(elem,N),该函数返回输入列表的副本,其中所有出现至少N次的元素都被删除了。该列表无法排序。例如((2,2,2,1,1,2,3,4,4,5),2)将返回(1,3,5)。
答案 0 :(得分:2)
您可以使用collections.Counter
import collections
def duplicate(lst, n):
counts = collections.Counter(lst)
keep = {v for v, count in counts.items() if count < n}
return [el for el in lst if el in keep]
答案 1 :(得分:1)
使用defaultdict
解决另一问题的方法是(PS:,如果需要的话,我们也可以使用普通的格言):
from collections import defaultdict
def duplicate(data, n):
counter = defaultdict(int)
for elm in data:
counter[elm] += 1
return [k for k, v in counter.items() if v < n]
a = (2, 2, 2, 1, 2, 3, 4, 4, 5)
print(duplicate(a, 2))
输出:
[1, 3, 5]
PS::如果要比较我的代码和Python的collections.Counter
类代码,请访问此collections in Python's Github repository。 (剧透警报,Counter
使用的是dict
而不是defaultdict
)
答案 2 :(得分:0)
我将在此处使用列表理解。假设elem是您输入的值列表。
[x for x in set(elem) if elem.count(x) < 2]