在lis中获取最大重复项

2024-05-14 09:20:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个清单:

mylist = [20, 30, 25, 20, 30]

在使用

[i for i, x in enumerate(mylist) if mylist.count(x) > 1]

结果是:

`[0, 1, 3, 4]` 

有两对重复值的。我想知道,怎样才能得到更高的重复值?在这个列表中,它是30或它的任何索引,14,而不是整个重复值列表。

问候。。。


Tags: in列表forifcount问候enumeratemylist
3条回答

这个是O(n)

>>> from collections import Counter
>>> mylist = [20, 30, 25, 20, 30]
>>> max(k for k,v in Counter(mylist).items() if v>1)
30

另一种方法,仅仅因为。。。

>>> from collections import defaultdict
>>> 
>>> mylist = [20,30,25,20,30]
>>> dd = defaultdict(int)
>>> for i in mylist:
...    dd[i] += 1
...
>>> max(i for i in dd if dd[i] > 1)
30

你也可以用一个普通的老字条:

>>> d = dict.fromkeys(mylist, 0)
>>> for i in mylist:
...   d[i] += 1
... 
>>> max(i for i in d if d[i] > 1)
30

获取最大重复值:

max(x for x in mylist if mylist.count(x) > 1)

不幸的是,由于count()调用重复,这有O(n**2)性能。这里有一个更为冗长的方法来完成与O(n)性能相同的任务,如果列表很长,这一点很重要:

seen = set()
dups = set()
for x in mylist:
    if x in seen:
        dups.add(x)
    seen.add(x)
max_dups = max(dups)

相关问题 更多 >

    热门问题