如何将初始列表转换为包含元素累计值重复项的目标列表?
问题解决方案
问题描述
现有初始列表:
emissions=[30,50,20,70]
需要转换为目标列表:
f=[0,30,30,80,80,100,100,160]
具体构成规则:
f=[] f[0]=0 f[1]=emissions[0] f[2]=emissions[0] f[3]=emissions[0]+emissions[1] f[4]=emissions[0]+emissions[1] f[5]=emissions[0]+emissions[1]+emissions[2] f[6]=emissions[0]+emissions[1]+emissions[2] f[7]=emissions[0]+emissions[1]+emissions[2]+emissions[3]
需通过循环实现该转换,求具体方法。
实现思路与代码
核心逻辑是先计算累积和序列,再对每个非初始0的累积值重复两次,最后拼接初始0与重复后的元素得到目标列表。
基础循环实现
emissions = [30, 50, 20, 70] # 计算包含初始0的累积和序列 cumulative = [0] current_total = 0 for num in emissions: current_total += num cumulative.append(current_total) # 生成目标列表 f = [cumulative[0]] for val in cumulative[1:]: # 每个累积值添加两次 f.extend([val, val]) print(f) # 输出: [0, 30, 30, 80, 80, 100, 100, 160]
简洁写法(用内置工具)
如果想简化代码,可以用itertools.accumulate快速计算累积和:
from itertools import accumulate emissions = [30, 50, 20, 70] # 生成包含初始0的累积和序列 cumulative = [0] + list(accumulate(emissions)) # 推导式生成目标列表 f = [cumulative[0]] + [val for val in cumulative[1:] for _ in range(2)] print(f)
代码解释
- 累积和计算:先初始化包含0的列表,遍历
emissions时逐步累加,得到每个阶段的总和,最终cumulative为[0, 30, 80, 100, 160]。 - 目标列表生成:从累积和的第二个元素开始,将每个值重复两次后加入结果列表,加上初始的0,即可得到符合规则的目标列表。
内容的提问来源于stack exchange,提问作者Ricardo Gomes
相关产品推荐
相关产品推荐

