1

我一直在使用max(Counter(a_list_here),key=Counter(a_list_here).get)来获取最常见的元素。

但是,当有 2 个元素具有匹配频率时,我想获得最小的元素。例如:

a= [1,2,5,5,8,8,5,7,8]

有三个 5 和三个 8。我的函数max(Counter(a),key=Counter(a).get)产生 8 而不是 5。

有没有办法快速而干净地做到这一点?

我正在使用 python 3.2

4

2 回答 2

1

这可能不是最快的方法,但是:

sorted([x for x in a if a.count(x) > 1])[0]

>>> a= [1,2,5,5,8,8,5,7,8]
>>> sorted([x for x in a if a.count(x) > 1])[0]
5
于 2013-07-19T01:28:38.357 回答
1

试试这个,不需要先排序:

from collections import Counter
a = [1,2,5,5,8,8,5,7,8]

在 Python 2.7 中:

max(Counter(a).iteritems(), key=lambda (k,v): (v,-k))[0]
=> 5

在 Python 3.x 中:

max(Counter(a).items(), key=lambda p: (p[1],-p[0]))[0]
=> 5
于 2013-07-19T01:30:57.617 回答