Python如何实现累加原列表前置元素值生成对应新列表
列表前缀累加值实现方案
你需要实现的逻辑是计算列表的前缀和,即每个索引位置的元素值为原列表从开头到当前索引位置所有元素的累加值,以下是几种可行的实现方式:
基础手写循环实现
无任何额外依赖,逻辑直白易修改,兼容所有Python版本,时间复杂度O(n),适合绝大多数场景:List1 = [100, 100, 0, 100, 100, 0, 100, 100, 0] List2 = [] current_accumulate = 0 for num in List1: current_accumulate += num List2.append(current_accumulate) # 运行后List2的值与示例给出的结果完全一致:[100, 200, 200, 300, 400, 400, 500, 600, 600]标准库内置方法实现
直接使用Python标准库itertools中的accumulate工具,代码最简洁,底层做了性能优化,处理大列表时效率更高,是生产环境优先选择的写法:from itertools import accumulate List1 = [100, 100, 0, 100, 100, 0, 100, 100, 0] List2 = list(accumulate(List1))列表推导式切片实现(仅适合短列表)
不需要导包、写法简短,但每次计算切片和的时间开销随列表长度增长,整体时间复杂度O(n²),仅建议在列表长度很短的临时场景使用:List1 = [100, 100, 0, 100, 100, 0, 100, 100, 0] List2 = [sum(List1[:idx+1]) for idx in range(len(List1))]
注意:如果原列表存在非数值类型元素,只要元素支持
+运算(比如自定义数值类、时间差对象等),前两种方法都可以正常运行。
内容的提问来源于stack exchange,提问作者kkfr0ma
相关产品推荐
相关产品推荐

