删除N个元素

时间:2019-02-07 01:41:59

标签: python

如何编写代码以返回将N次出现的所有元素都删除的列表?

我正在尝试编写一个python函数plicate(elem,N),该函数返回输入列表的副本,其中所有出现至少N次的元素都被删除了。该列表无法排序。例如((2,2,2,1,1,2,3,4,4,5),2)将返回(1,3,5)。

3 个答案:

答案 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]