Pythonのリストの最も一般的な要素


13

これは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

回答:


5

これはどう?

c=l.count;{x for x in l if c(x)==max(map(c,l))}

囲んで[*...]リストを取得します。


右ああ、私は感謝し、独自のリストやセットが必要なのか
musicman523

@ musicman523で更新した理由はl.count(max(l,key=l.count))max(map(l.count,l))短い
ウリエル

ああ、あれは考えていなかった、ありがとう!
musicman523
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.