You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何更简便地统计列表中各数值区间内的元素数量?

更简洁高效的数值区间统计实现方案

当然有更简洁的实现方式!而且还能解决原代码里重复调用count()带来的性能浪费问题——原代码里每次count(i)都会完整遍历一遍列表,数据量大的时候效率很低。下面给你几种更优的写法:

方法1:用collections.Counter(推荐)

这是最简洁且高效的方式,借助标准库的Counter一次完成分组统计,然后遍历区间输出:

from collections import Counter

a = [1, 7, 4, 7, 4, 8, 5, 2, 17, 8, 3, 12, 9, 6, 28]
interval = 3

# 分组并统计每个组的元素数量
group_counts = Counter(x // interval for x in a)
# 获取所有需要覆盖的区间范围
min_group = min(group_counts.keys())
max_group = max(group_counts.keys())

# 遍历每个区间输出结果
for group in range(min_group, max_group + 1):
    print(f"{group*interval} {(group+1)*interval} : {group_counts.get(group, 0)}")

优势:只需要遍历列表一次就能完成统计,时间复杂度为O(n),比原代码的O(n*m)高效得多;代码逻辑清晰,可读性强。

方法2:极简版(更紧凑)

如果追求极致精简,可以把步骤进一步合并,可读性稍降但代码更短:

from collections import Counter

a = [1, 7, 4, 7, 4, 8, 5, 2, 17, 8, 3, 12, 9, 6, 28]
interval = 3
counts = Counter(x//interval for x in a)
for g in range(min(counts), max(counts)+1):
    print(f"{g*interval} {(g+1)*interval} : {counts.get(g,0)}")

方法3:不用额外库的字典统计

如果不想引入Counter,用基础字典也能实现类似效果:

a = [1, 7, 4, 7, 4, 8, 5, 2, 17, 8, 3, 12, 9, 6, 28]
interval = 3
group_counts = {}

for num in a:
    key = num // interval
    group_counts[key] = group_counts.get(key, 0) + 1

min_g, max_g = min(group_counts), max(group_counts)
for g in range(min_g, max_g + 1):
    print(f"{g*interval} {(g+1)*interval} : {group_counts.get(g, 0)}")

以上几种方法都能输出和你原代码完全一致的结果,同时在效率和简洁性上都有提升。

内容的提问来源于stack exchange,提问作者wangtianye

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:03:37