collections.Counter
で
とリスト内包:効率的に反復するために、大規模なイテラブルのために
c = Counter(lst)
m = max(c.values())
r = [k for k in c if c[k] == m]
print(r)
# [1, 3, 5]
:あなたはカウンタ値にmax
を使用して、最高のカウントと値のために一般化することができます
from collections import Counter
lst = [1, 3, 5, 1, 5, 6, 1, 1, 3, 4, 5, 2, 3, 4, 5, 3, 4]
r = [x for x, _ in Counter(lst).most_common(3)]
print(r)
# [1, 3, 5]
カウンターを通過して必要な項目を取り終えたら、itertools.takewhile
とmost_common
をパラメータなしで使用することができます:
あなたが
ソート
most_common
を使用してアイテムを持ついくつかのオーバーヘッドがあるが、カウンターオブジェクトのすべての項目を反復処理する必要がないことによって得る
from itertools import takewhile
c = Counter(lst)
m = max(c.values())
r = [x for x, _ in takewhile(lambda x: x[1]==m, c.most_common())]
print(r)
# [1, 3, 5]
。結局のところなら絶対に効率的です。 timeitでいくつかの実験を行うことができます。あなたはすべての最も頻繁に印刷したい場合は、次の操作を行うことができます
リンクに答えるスライス 'popular_wordsを[ありません] 'を返します。実際のカウンタには、トップ3だけでなく、すべての合計が含まれます。 – krock