隨着collections.Counter
和列表理解:
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]
您可以通過使用計數器值max
概括爲最高的計數值:
c = Counter(lst)
m = max(c.values())
r = [k for k in c if c[k] == m]
print(r)
# [1, 3, 5]
對於大型iterables,有效地迭代通過計數器並停止一次所需的物品後,您可以使用與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]
你獲得通過不通過櫃檯對象中的所有項目進行迭代,雖然有一定的開銷不必使用most_common
排序的項目;所以我肯定這個絕對是畢竟是高效的。你可以用timeit做一些實驗。
,在鏈接回答做了切片'popular_words [:3 ]'只返回前3名。實際計數器包含所有總數,而不僅僅是前3名。 – krock