如何查找列表python的最大重复项

时间:2018-10-07 20:07:08

标签: python list duplicates

给出一个正整数列表,将最大的重复元素与变量maximum关联。如果列表中没有重复项,请将-1与maximum关联。

4 个答案:

答案 0 :(得分:2)

有多种方法可以完成此操作,具体取决于您的时间/空间复杂性要求。这里有一些想法:

使用一组

def max_dup(lst):
    seen = set()        
    for i in sorted(lst, reverse=True):
        if i in seen:
            return i
        seen.add(i)
    return -1

使用collections.Counter

from collections import Counter

def max_dup(lst):
    cnt = Counter(lst)
    return max((k for k in cnt if cnt[k] > 1), default=-1)

使用itertools.groupby

from itertools import groupby

def max_dup(lst):
    for k, g in groupby(sorted(lst, reverse=True)):
        if len(list(g)) > 1:
            return k
    return -1

在我的测试中(对于较小的列表),使用一组似乎是最快的方法,但是您的里程可能会有所不同。

答案 1 :(得分:1)

您也可以在没有计数器的情况下执行此操作:

def max_dup(numbers):
    desc_numbers = sorted(numbers, reverse=True)
    for i in range(1, len(desc_numbers)):
        if desc_numbers[i] == desc_numbers[i - 1]:
            return desc_numbers[i]
    return -1

print(max_dup([1,2,3,4,5,5,6,7])) # 5
print(max_dup([1,2,3,4,5,6,7])) # -1

答案 2 :(得分:0)

这可以通过 itertools.groupby 完成,我们首先必须对列表进行排序,然后如果对应的k具有{{ 1}}进入新列表。然后,我们可以在该列表上使用list(g)

len > 1

展开:

max

答案 3 :(得分:0)

对列表进行排序,成对地遍历列表,在第一个匹配对上退出。

def maxdup(l):
    l = sorted(l, reverse=True)
    for i in range(1, len(l)):
        if l[i-1] == l[i]:
            return l[i]

    return -1