我一直在使用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
我一直在使用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
这可能不是最快的方法,但是:
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
试试这个,不需要先排序:
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