如何在列表中查找重复项并追加到新列表中

时间:2019-04-27 04:18:25

标签: python-3.x

def dups(a):

    emp = []
    for item in a:
        if item not in list(set(a)):
            emp.append(item)
    return emp

b = [1, 2, 2, 4, 21, 5, 2, 6, 1, 7, 0]
print(dups(b))

这给了我一个空数组,我不知道为什么。

1 个答案:

答案 0 :(得分:0)

如果打印list(set(a)的值,则会得到[0, 1, 2, 4, 5, 6, 7, 21],它们是a中的所有元素,因此当您执行if item not in list(set(a))时,势必会得到一个空列表,因为该条件消除了所有项目。

一种更好的方法是查找列表中所有元素的计数,重复项将是所有具有count >1的元素,如下所示。

from collections import Counter

def dups(a):

    emp = []
    #This gives you a dictionary of number to frequency of occurence
    counter = Counter(a)
    #Counter({2: 3, 1: 2, 4: 1, 21: 1, 5: 1, 6: 1, 7: 1, 0: 1})
    #Iterate through the dict, and if freq is more that 1, it is duplicate
        for k,v in counter.items():
        if v > 1:
            emp.append(k)
    return emp

b = [1, 2, 2, 4, 21, 5, 2, 6, 1, 7, 0]
print(dups(b))

预期输出为:

[1, 2]