1

私はmax(Counter(a_list_here),key=Counter(a_list_here).get)最も一般的な要素を取得するために使用してきました。

ただし、周波数が一致する2つの要素がある場合、最小の要素を取得したいと考えています。例えば:

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

3 つの 5 と 3 つの 8 があります。私の関数max(Counter(a),key=Counter(a).get)は 5 ではなく 8 を生成します。

これをすばやくきれいに行う方法はありますか?

私は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 に答える