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

如何将嵌套列表的和传递给下一个列表?原列表需保持不变

问题分析与解决方案

问题描述

给定原始列表:

my_list = [[3, 4, -1], [0, 1], [-2], [7, 5, 8]]

需求:将第i个嵌套列表的求和结果追加到第i+1个嵌套列表的右侧(类似接力传递),原列表必须保持原样且不允许复制,期望输出:

wanted = [[3, 4, -1], [0, 1, 6], [-2, 7], [7, 5, 8, 5]]

尝试的代码及错误输出:

from itertools import pairwise

wanted = []

for left, right in pairwise(my_list):
    wanted.extend([left, right + [sum(left)]])
    
print(wanted)
# 错误输出:[[3, 4, -1], [0, 1, 6], [0, 1], [-2, 1], [-2], [7, 5, 8, -2]]

错误原因

  • pairwise(my_list)会生成连续元素对:([3,4,-1], [0,1])、([0,1], [-2])、([-2], [7,5,8])
  • 每次循环用extend把left和修改后的right都塞进wanted,导致原列表的中间元素(比如[0,1]、[-2])被重复添加,最终列表长度变成6,远超原列表的4个元素
  • 这段代码没处理原列表最后一个元素的保留逻辑,仅靠最后一组对的right添加,但前面的重复元素已经导致结构完全混乱

解决方案

基础实现

逐个构建目标列表,确保原列表不受影响:

my_list = [[3, 4, -1], [0, 1], [-2], [7, 5, 8]]
wanted = []

# 直接保留原列表第一个子列表(不修改原数据)
wanted.append(my_list[0])

# 遍历从第二个到最后一个的子列表,生成带前一个求和结果的新列表
for i in range(1, len(my_list)):
    prev_total = sum(my_list[i-1])
    # 用原列表子列表拼接求和结果,生成新列表加入wanted,不改动原列表
    wanted.append(my_list[i] + [prev_total])

print(wanted)
# 输出:[[3, 4, -1], [0, 1, 6], [-2, 7], [7, 5, 8, 5]]

简洁实现(列表推导式)

先预计算所有子列表的和,再通过列表推导式快速构建结果:

my_list = [[3, 4, -1], [0, 1], [-2], [7, 5, 8]]
# 先算出每个子列表的求和结果
sub_sums = [sum(sublist) for sublist in my_list]
# 第一个元素直接取原列表,后面的元素拼接前一个的求和结果
wanted = [my_list[0]] + [my_list[i] + [sub_sums[i-1]] for i in range(1, len(my_list))]

print(wanted)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 07:29:51