Python 中如何统计列表中元素出现的次数?

Python 统计列表元素次数:list.count() 数单个元素;collections.Counter 一次性统计所有元素并支持 most_common() 取 TOP N。本文介绍两种方法。

最佳实践
Python 中如何统计列表中元素出现的次数?封面

数单个元素用 list.count(x);统计所有元素的频次用 collections.Counter,还支持 most_common(n) 直接拿出现最多的前 N 个。

count():数单个元素

my_list = ['a', 'b', 'a', 'c', 'a']
print(my_list.count('a'))  # 3

Counter:统计所有元素

from collections import Counter

my_list = ['a', 'b', 'a', 'c', 'a']
counter = Counter(my_list)

print(counter)                  # Counter({'a': 3, 'b': 1, 'c': 1})
print(counter['a'])             # 3
print(counter.most_common(2))   # [('a', 3), ('b', 1)]——TOP 2

Counter 本质是 dict 子类,查询不存在的键返回 0 而不报错。

典型应用

# 日志中统计状态码分布
codes = [200, 200, 404, 500, 200, 404]
Counter(codes)  # Counter({200: 3, 404: 2, 500: 1})

# 找出出现超过 1 次的元素
[x for x, n in Counter(my_list).items() if n > 1]

性能注意

list.count() 每次调用是 O(n) 遍历;如果要统计多个元素,用一次 Counter(O(n) 建表,之后每次查询 O(1)),比对每个元素都 count 一遍(O(n²))快得多。

常见问题(FAQ)

Q:列表元素不可哈希(如列表里套列表)怎么办?
A:count() 可用(按相等性比较);Counter 不行(需要可哈希)。可先转成元组。

Q:Counter 能做加减吗?
A:能。Counter(a) + Counter(b) 合并计数,Counter(a) - Counter(b) 相减(只保留正数)。

Q:百分比怎么算?
A:n / len(my_list),配合 Counter 遍历即可。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台