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

如何将初始列表转换为包含元素累计值重复项的目标列表?

问题解决方案

问题描述

现有初始列表:

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)

代码解释

  1. 累积和计算:先初始化包含0的列表,遍历emissions时逐步累加,得到每个阶段的总和,最终cumulative为[0, 30, 80, 100, 160]。
  2. 目标列表生成:从累积和的第二个元素开始,将每个值重复两次后加入结果列表,加上初始的0,即可得到符合规则的目标列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 18:33:28