我想编写一个函数,它接受一个列表并返回列表中重复元素总数的计数

时间:2017-04-20 17:32:14

标签: python

我试过这个,因为一些未知的原因,当它打印h时,它打印无,所以我想如果它计算无打印的数量然后除以2它将给出重复的数量,但我不能使用函数计数这里

a= [1,4,"hii",2,4,"hello","hii"]
def duplicate(L):
    li=[]
    lii=[]
    h=""
    for i in L:
        y= L.count(i)
        if y>1:
            h=y
            print h
            print h.count(None)

duplicate(a)

4 个答案:

答案 0 :(得分:1)

使用Counter容器:

from collections import Counter
c = Counter(['a', 'b', 'a'])

c现在是一个包含数据的字典:Counter({'a': 2, 'b': 1})

如果您想获得包含所有重复元素的列表(不重复),您可以执行以下操作:

duplicates = filter(lambda k: c[k] > 1, c.iterkeys())

如果您只想计算重复项,则可以设置

duplicates_len = len(duplicates)

答案 1 :(得分:0)

您可以使用set获取唯一元素的数量,然后比较尺寸 - 类似:

def duplicates(l):
    uniques = set(l)
    return len(l) - len(uniques)

答案 2 :(得分:-1)

egualo的答案要好得多,但这是使用字典的另一种方式。

def find_duplicates(arr):
    duplicates = {}
    duplicate_elements = []

    for element in arr:
        if element not in duplicates:
            duplicates[element] = False
        else:
            if duplicates[element] == False:
                duplicate_elements.append(element)
            duplicates[element] = True

        return duplicate_elements

它非常简单,并且没有两次通过列表,这很好。

>> test = [1,2,3,1,1,2,2,4]
>> find_duplicates(test)
[1, 2]

答案 3 :(得分:-1)

我找到了答案

a= [1,4,"hii",2,4,"hello",7,"hii"]
def duplicate(L):
    li=[]
    for i in L:
        y= L.count(i)
        if y>1:
            li.append(i)
    print len(li)/2

duplicate(a)