Skip to main content
 首页 » 编程设计

python之列表中的计数频率

2025年05月04日15lori

我有一个列表列表:

countall = [[5, 0], [4, 1], [4, 1], [3, 2], [4, 1], [3, 2], [3, 2], [2, 3], [4, 1], [3, 2], [3, 2], [2, 3], [3, 2], [2, 3], [2, 3], [1, 4], [4, 1], [3, 2], [3, 2], [2, 3], [3, 2], [2, 3], [2, 3], [1, 4], [3, 2], [2, 3], [2, 3], [1, 4], [2, 3], [1, 4], [1, 4], [0, 5]] 

我想在上面的列表中找到子列表的频率。

我尝试过使用 itertools:

freq = [len(list(group)) for x in countall for key, group in groupby(x)] 

但是,我得到了错误的结果:

[1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1] 

我的列表理解有什么问题?

请您参考如下方法:

Groupby 似乎处理一个接一个的序列。要使用它,您需要先对列表进行排序。另一种选择是使用 Counter类:

from collections import Counter 
countall = [[5, 0], [4, 1], [4, 1], [3, 2], [4, 1], [3, 2], [3, 2], [2, 3], [4, 1], [3, 2], [3, 2], [2, 3], [3, 2], [2, 3], [2, 3], [1, 4], [4, 1], [3, 2], [3, 2], [2, 3], [3, 2], [2, 3], [2, 3], [1, 4], [3, 2], [2, 3], [2, 3], [1, 4], [2, 3], [1, 4], [1, 4], [0, 5]] 
Counter([tuple(x) for x in countall]) 

输出:

Counter({(3, 2): 10, (2, 3): 10, (1, 4): 5, (4, 1): 5, (5, 0): 1, (0, 5): 1})