Python如何计算列表前缀和,生成每一位为原列表前序元素总和的新列表
Python实现前缀和数组的常用方法
以下所有方法基于你给出的示例列表 A = [3,5,7,8,9,12,13,20] 测试,最终输出均为 [3, 8, 15, 23, 32, 44, 57, 77],符合你的预期。
- 方法1:基础遍历累加(无额外依赖,兼容性最好)
这是最容易理解的实现方式,不需要引入任何第三方库,所有Python版本都支持:
A = [3,5,7,8,9,12,13,20] B = [] current_sum = 0 for num in A: current_sum += num B.append(current_sum)
时间复杂度为O(n),仅需要维护一个临时累加变量,性能优异。
- 方法2:使用itertools.accumulate(标准库内置,写法最简洁)
Python3.3及以上版本的标准库自带了累加迭代器,可以直接生成前缀和:
from itertools import accumulate A = [3,5,7,8,9,12,13,20] B = list(accumulate(A))
底层实现和手动循环逻辑一致,性能没有损失,代码可读性更高。
- 方法3:使用numpy.cumsum(适合大规模数值数组)
如果你处理的是长度很大的数值类列表,用numpy的内置方法性能会远高于纯Python实现:
import numpy as np A = [3,5,7,8,9,12,13,20] B = np.cumsum(A).tolist()
注意该方法需要提前安装numpy库,纯Python原生环境无法直接使用。
- 方法4:列表推导式实现(仅适合短数组)
如果只是临时处理长度很小的列表,可以用列表推导式快速实现:
A = [3,5,7,8,9,12,13,20] B = [sum(A[:i+1]) for i in range(len(A))]
该方法时间复杂度为O(n²),列表长度超过100时性能会明显下降,不推荐长列表使用。
内容的提问来源于stack exchange,提问作者Newyen minh
相关产品推荐
相关产品推荐

