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

Python中计算列表从下一个元素起的累积和的最优方法

Python计算列表元素后续累积和的高效方法

给定列表 L = [600, 200, 100, 80, 20],需要计算每个元素从下一个元素开始的累积和,预期输出如下:

x_1 = 400 (200 + 100 + 80 + 20)
x_2 = 200 (100 + 80 + 20)
x_3 = 20 (20)
x_4 = 0

最高效实现方法

用itertools.accumulate结合列表反转是最优解——accumulate是C底层实现的工具,比纯Python循环快得多,整体时间复杂度为O(n),属于线性时间操作,处理大数据量时优势明显。

具体逻辑:

  1. 取原列表从第二个元素开始的子列表,反转后计算累积和,得到从原列表末尾往前的累加结果
  2. 把累积和列表再次反转,就能对应原列表每个位置后续元素的总和
  3. 最后补一个0,对应最后一个元素没有后续元素的情况

代码示例

from itertools import accumulate

L = [600, 200, 100, 80, 20]
# 取原列表第二个元素及之后的部分,反转后计算累积和
reversed_accum = list(accumulate(reversed(L[1:])))
# 反转累积和列表,补0得到最终结果
result = reversed_accum[::-1] + [0]

# 按预期格式输出
for idx, value in enumerate(result[:-1], 1):
    follow_elements = L[idx:]
    expr = " + ".join(map(str, follow_elements))
    print(f"x_{idx} = {value} ({expr})")
# 单独输出最后一个结果
print(f"x_{len(result)-1} = {result[-1]}")

运行后会直接输出符合要求的结果。

备选方案(效率较低)

如果不想引入itertools,可以先计算列表总和,再逐个减去前面元素的和,但这种方法时间复杂度为O(n²),数据量大时效率明显下降:

L = [600, 200, 100, 80, 20]
total = sum(L)
result = [total - sum(L[:i+1]) for i in range(len(L)-1)] + [0]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 19:20:35