如何用Python按指定索引对列表值进行分段求和?
高效实现指定区间求和的方案
给定索引列表 indices = [13,28,59,69] 和数值列表 values,要计算你指定的四个区间和,前缀和数组是最简便高效的方法,完全不需要嵌套遍历,能避免重复计算同时大幅提升效率。
实现步骤
1. 构建前缀和数组
前缀和数组的核心是存储前i个元素的累加和,这样任意区间[a, b](包含两端)的和都可以通过prefix[b+1] - prefix[a]直接得到,边界处理更顺畅。
示例代码:
# 假设values是你的完整数值列表 values = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,...] # 初始化前缀和数组,第一个元素为0(对应前0个元素的和) prefix = [0] for num in values: prefix.append(prefix[-1] + num)
用Python标准库可以更简洁:
from itertools import accumulate prefix = [0] + list(accumulate(values))
2. 计算各区间和
根据你的需求,直接遍历索引列表就能依次算出每个目标区间的和:
indices = [13,28,59,69] result = [] # 第一个区间:0到13的和 result.append(prefix[indices[0] + 1] - prefix[0]) # 后续区间:从上个索引+1到当前索引的和 for i in range(1, len(indices)): start = indices[i-1] + 1 end = indices[i] result.append(prefix[end + 1] - prefix[start]) # 输出结果 print(result)
方案优势
- 效率更高:预处理前缀和是O(n),计算区间和是O(k)(k是索引列表长度),远优于嵌套遍历的O(n*k),当
values规模很大时差异会非常明显。 - 逻辑清晰:没有复杂的嵌套结构,代码简洁易维护,不容易出错。
内容的提问来源于stack exchange,提问作者mnnewbilr
相关产品推荐
相关产品推荐

