我有一个这样的列表:
lst = [1, 3, 5, 1, 5, 6, 1, 1, 3, 4, 5, 2, 3, 4, 5, 3, 4]
我想找到所有 出现频率最高的元素。
所以我想:
most = [1, 3, 5]
1、3、5出现次数最多,共4次。什么是快速的 pythonic 方法来做到这一点?我尝试了此处显示的方法:
How to find most common elements of a list? .
但它只给了我前 3 名,我需要所有元素。谢谢。
与 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]
对于大型可迭代对象,要有效地遍历计数器并在获取所需项目后停止,您可以使用 itertools.takewhile
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 做一些实验.