如何简化Python列表分组累计求和代码以实现预期输出
Python列表分组累计求和简化实现方案
需求说明
将列表按指定数量分组后,分别在每个分组内执行累计求和(前缀和),支持分组数量动态调整,无需硬编码分组范围。
可行方案
方案1:使用标准库itertools.accumulate实现(最简洁)
itertools.accumulate是Python内置的累计计算工具,代码可读性最高:
from itertools import accumulate a = [16.0, 6.0, 4.0, 15.0, 3.0, 3.0, 5.0, 1.0, 2.0] b = 3 # 分组数量可动态调整 group_size = len(a) // b c = [] for group_idx in range(b): # 按索引切取对应分组 current_group = a[group_idx * group_size : (group_idx + 1) * group_size] # 对当前分组计算累计和,追加到结果列表 c.extend(accumulate(current_group)) print(c)
输出结果完全匹配预期:[16.0, 22.0, 26.0, 15.0, 18.0, 21.0, 5.0, 6.0, 8.0]
方案2:纯原生实现(无额外依赖)
如果不想引入标准库导入,可自己实现累计逻辑:
a = [16.0, 6.0, 4.0, 15.0, 3.0, 3.0, 5.0, 1.0, 2.0] b = 3 # 分组数量可动态调整 group_size = len(a) // b c = [] for group_idx in range(b): group_start = group_idx * group_size current_sum = 0 # 遍历当前分组的每个元素 for offset in range(group_size): current_sum += a[group_start + offset] c.append(current_sum) print(c)
额外说明:你原有的硬编码代码存在逻辑错误,子循环中直接索引原列表的全局位置而非分组内的相对位置,当分组数量调整时会得到错误结果,上述方案已经修复了该问题。
内容的提问来源于stack exchange,提问作者DreamyDeerz
相关产品推荐
相关产品推荐

