Python如何用单行代码实现列表累加前缀和(输入[1,2,3]输出[1,3,6])
问题说明
给定初始列表 a = [1,2,3],需要通过单行代码得到前缀和结果 [1,3,6],原多行实现逻辑是遍历列表时逐次累加当前值,收集每一步的累加结果生成新列表。
单行实现方案
有两种通用的实现方式,均可以直接运行得到目标结果:
- 方案1:使用标准库
itertools.accumulate(推荐,兼容所有Python3版本,逻辑最简洁)
from itertools import accumulate; a = [1,2,3]; print(list(accumulate(a)))
accumulate默认就会按顺序做逐次累加运算,返回的迭代器转成列表后就是目标前缀和结果,和手写循环累加的逻辑完全一致。
- 方案2:无导入实现,适合Python 3.8及以上版本,用海象运算符在列表推导中维护累加状态
a = [1,2,3]; print((k:=0, [k:=k+i for i in a])[1])
这个写法完全复现了原多行代码的执行流程:先初始化累加值k=0,遍历列表时不断更新k的累加结果,同时把每一步的k值收集到新列表里,不需要额外导入模块。
提示:如果运行环境的Python版本低于3.8,不要使用第二种方案,会触发海象运算符相关的语法错误。
内容的提问来源于stack exchange,提问作者shuai shuai
相关产品推荐
相关产品推荐

