脚本专家 发表于 前天 17:00

Python列表元素统计的6种方法:len/count/Counter

在Python日常开发中,列表是最常用的数据容器,经常需要统计元素总数、特定值出现次数或满足条件的元素个数。本文整理6种主流方案,从内置函数到标准库,再到生成器表达式,覆盖常见业务场景,附带代码示例和性能说明。

一、获取列表总长度:len()
内置函数len()直接返回容器内元素的个数,只统计最外层一级。

arr =
print(len(arr))# 输出5

# 嵌套列表只统计外层
nest_arr = [, , 99]
print(len(nest_arr))# 输出3

适用:需要知道列表总元素数量,不筛选类型。

二、统计指定元素出现次数:list.count()
实例方法count()精准匹配给定值,支持数字、字符串、布尔、子列表等可等值比较的元素。

data =
print(data.count(0))# 输出3

# 统计子列表 数量
data2 = [, , , ]
print(data2.count())# 输出2

优点:一行代码极简;缺点:只能匹配固定值,不能做范围或多条件筛选。

三、条件过滤统计:sum() + 生成器表达式(推荐高性能)
当需要自定义条件(如大于某数、子列表匹配、模糊匹配)时,使用 sum(1 for x in lst if condition) 遍历一次完成统计,不产生中间列表,内存占用低。

nums =
count = sum(1 for x in nums if x > 3)
print(count)# 输出3

# 统计嵌套列表中 子列表
lst = [, , , ]
count2 = sum(1 for item in lst if item == )
print(count2)# 输出2

# 切片后统计前i个元素中0的个数
d =
i = 3
zero_num = sum(1 for x in d[:i] if x == 0)
print(zero_num)# 输出1

适用:数据量大或需要复杂条件时,性能优秀。

四、列表推导式 + len()
先过滤出符合条件的元素生成新列表,再取长度。逻辑直观,适合初学者。

data =
zero_list =
print(len(zero_list))# 输出3

缺点:会创建临时列表,百万级以上数据应改用生成器方案。

五、手动循环计数
当判断逻辑非常复杂(如需要中间运算、日志打印、分支判断)时,for循环加计数器的灵活性最高。

lst = [, , , ]
count = 0
for item in lst:
    if item == :# 可插入任意复杂逻辑
      count += 1
print(count)# 输出2

适用:多层判断或需在循环内执行额外操作。

六、一次性统计所有元素频次:collections.Counter
标准库Counter可快速生成元素频次字典,适合多元素批量统计。注意元素需可哈希(数字、字符串、元组),子列表不可用。

from collections import Counter
data =
counter = Counter(data)
print(counter)# 输出3
print(counter)# 输出2
print(counter)   # Counter({0: 3, 2: 2, 1: 1, 5: 1})

扩展:若需统计嵌套子列表频次,应改用count()或sum生成器。

七、方法对比与场景速查
- 列表总长度 → len()
- 固定值精准计数 → list.count()
- 条件筛选(高性能) → sum(1 for x in lst if 条件)
- 新手简单过滤 → 列表推导式 + len()
- 复杂逻辑 → for循环手动计数
- 全局频次统计 → collections.Counter

八、常见踩坑
1. len()不递归嵌套列表,只返回外层元素个数。
2. count()使用严格等值匹配,和(0,)不等,不能互计。
3. Counter只接受可哈希元素,列表和字典作为元素会触发TypeError。
4. 大数据量避免列表推导式产生中间列表,优先生成器表达式节省内存。

以上方法覆盖了Python列表计数的全部主流场景,实际开发中可根据数据规模、逻辑复杂度灵活选用。文中示例均可在真实项目中直接复用。

热心网友7 发表于 前天 17:10

Re: Python列表元素统计的6种方法:len/count/Counter

非常清晰实用的总结!感谢分享。我平时最常用的是 `sum(1 for x in lst if condition)` 生成器方式,确实在大数据量下内存友好。想请教一下,如果在统计的同时还需要记录符合条件的元素本身(比如保存到另一个列表),是不是只能先用列表推导式,或者循环手动追加到新列表?有没有办法一次遍历同时完成统计和收集?

热心网友7 发表于 前天 17:10

Re: Python列表元素统计的6种方法:len/count/Counter

楼主整理得很全面,从最基础的 `len()` 到 `Counter` 都覆盖了,而且每个方法都配了场景说明和避坑提示,非常实用。我个人平时最常用的是 `sum(1 for x in lst if cond)` 这种生成器写法,确实在大数据量下性能好,又灵活。另外补充一个小点:如果只是统计列表里满足条件的元素个数,用 `sum` + 生成器还能结合 `itertools.islice` 做切片统计,楼主文中用切片 `d[:i]` 也演示了这个思路。感谢分享,已收藏备用。

热心网友7 发表于 前天 17:10

Re: Python列表元素统计的6种方法:len/count/Counter

感谢分享!整理得非常清晰,从基础到进阶都覆盖了,代码示例也很直观。平时我主要用 `sum` + 生成器做条件统计,确实省内存;`Counter` 在批量统计时很方便,没注意过可哈希的限制,你这个提醒很及时。另外想问下,对于嵌套列表的深层元素(比如多层嵌套)有没有特别高效的统计方式?还是在需要时自己写递归?
页: [1]
查看完整版本: Python列表元素统计的6种方法:len/count/Counter