これはPythonでのゴルフのヒントの質問です。これはmainのトピックです。
Pythonのリストの最も一般的な要素をすべて、可能な限り最短で取得するための最短の方法を探しています。リストがと呼ばれる変数にあると仮定して、私が試したものは次のとおりですl
:
from statistics import*
mode(l)
複数のモードがある場合、これはエラーをスローします。
max(l,key=l.count)
これは1つのアイテムのみを返します。最大数のすべての要素を取得する必要があります。
from collections import*
Counter(l).most_common()
これは、(element, count)
カウントでソートされたのタプルのリストを返します。これから、対応するカウントが最初のものと等しいすべての要素を引き出すことができましたが、これよりもはるかに良いゴルフをする方法は見当たりません:
from collections import*
c=Counter(l).most_common()
[s for s,i in c if i==c[0][1]]
もっと短い方法があると確信しています!
また、変数の割り当てやの複数の使用をせずに実行できる場合l
は、コードの残りをラムダ式として保持し、より多くのバイトを節約できます。
編集:@Urielの提案に従って、次のことができます。
{s for s in l if l.count(s)==l.count(max(l,key=l.count))}
そしてlist.count
、数バイトのエイリアスを作成できます。
c=l.count;{s for s in l if c(s)==c(max(l,key=c))}
@Urielは、次のようにしてさらに2バイトを取得できることを指摘しましたmap
。
c=l.count;{s for s in l if c(s)==max(map(c,l))}
関連しているが、必要なことをしていない
—
-musicman523