我一直在使用max(Counter(a_list_here),key=Counter(a_list_here).get)
來獲得最常見的元素。得到最常見的元素,但如果頻率匹配,得到更低的元素
但是,當有2個元素具有匹配的頻率時,我想獲得最小的元素。例如:
a= [1,2,5,5,8,8,5,7,8]
有三個5和三個787-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和三個787-8。我的功能max(Counter(a),key=Counter(a).get)
產生8而不是5.
有沒有辦法快速乾淨地做到這一點?
我使用python 3.2
試試這個,就沒有必要先解決它:
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
這可能不是最快的方法,但是:
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
是爲O(n^2) –
的n log N - n到列表中去,則n日誌N排序 – Owen
什麼是這個時間複雜度?非常聰明的工作在 –
這是'O(n)'複雜 –
太棒了!不過,我在'(k,v)'的括號中得到了一個語法錯誤......是python 3的區別嗎? –