Arj*_*van 4 python list frequency max
我有一个这样的列表:
lst = [1, 3, 5, 1, 5, 6, 1, 1, 3, 4, 5, 2, 3, 4, 5, 3, 4]
Run Code Online (Sandbox Code Playgroud)
我想找到最常出现的所有元素.所以我想:
most = [1, 3, 5]
Run Code Online (Sandbox Code Playgroud)
1,3和5会发生最多,这是4次.什么是快速,pythonic方式来做到这一点?我试过这里显示的方法:
但它只给我前3名,我需要所有元素.谢谢.
Mos*_*oye 10
用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]
Run Code Online (Sandbox Code Playgroud)
您可以通过使用max
计数器值来推广具有最高计数的值:
c = Counter(lst)
m = max(c.values())
r = [k for k in c if c[k] == m]
print(r)
# [1, 3, 5]
Run Code Online (Sandbox Code Playgroud)
对于大型iterables,以有效地通过计数器进行迭代,并停止一旦已采取所需物品,你可以使用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]
Run Code Online (Sandbox Code Playgroud)
你不必迭代计数器对象中的所有项目就可以获得,尽管有一些开销需要使用对项目进行排序most_common
; 所以我敢肯定,这毕竟是绝对有效的.你可以用timeit做一些实验.
归档时间: |
|
查看次数: |
1382 次 |
最近记录: |