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

Python递归/循环实现嵌套列表各层级元素求和

解决嵌套列表层级求和问题

编写Python函数,接收包含嵌套列表的数值列表,返回由嵌套层级及对应层级整数和组成的列表。示例输入:[1,4,[3,[100]],3,2,[1,[101,1000],5],1,[7,9]],预期输出:[[0,11], [1,25], [2,1201]],要求使用递归或循环且不导入任何模块。

原代码问题分析

你提供的代码存在几个核心问题:

  • 处理第一个元素后立即return,导致仅遍历了列表的第一个元素,后续元素完全未处理
  • 遇到子列表时,递归传入的是lst[1:](原列表去掉首元素),而非当前子列表lst[0],逻辑完全错误
  • 没有累积同一层级的所有整数和,也未收集所有层级的结果,仅返回单个层级的局部和,不符合需求

递归实现方案

def calculate_level_sums(lst):
    level_sums = {}
    
    def traverse(current_list, current_level):
        # 初始化当前层级的和(若未存在)
        if current_level not in level_sums:
            level_sums[current_level] = 0
        for item in current_list:
            if isinstance(item, int):
                level_sums[current_level] += item
            elif isinstance(item, list):
                # 递归处理子列表,层级+1
                traverse(item, current_level + 1)
    
    # 从最外层(层级0)开始遍历
    traverse(lst, 0)
    # 按层级排序后转换为要求的二维列表格式
    return [[level, total] for level, total in sorted(level_sums.items())]

逻辑说明

  • 用字典level_sums动态存储每个层级的整数和,支持任意深度的嵌套
  • 递归函数traverse遍历当前列表的每个元素:
    • 若为整数,直接累加到对应层级的和中
    • 若为子列表,则递归遍历该子列表,层级加1
  • 最后将字典按层级从小到大排序,转换为题目要求的输出格式

测试示例:

sample_input = [1,4,[3,[100]],3,2,[1,[101,1000],5],1,[7,9]]
print(calculate_level_sums(sample_input))
# 输出:[[0, 11], [1, 25], [2, 1201]]

循环实现方案(栈模拟递归)

如果不想用递归,可以用栈来模拟递归过程,避免深度嵌套导致的栈溢出风险:

def calculate_level_sums_iterative(lst):
    level_sums = {}
    # 栈中存储(当前遍历的列表, 当前层级)的元组
    stack = [(lst, 0)]
    
    while stack:
        current_list, current_level = stack.pop()
        # 初始化当前层级的和
        if current_level not in level_sums:
            level_sums[current_level] = 0
        for item in current_list:
            if isinstance(item, int):
                level_sums[current_level] += item
            elif isinstance(item, list):
                # 将子列表和对应层级压入栈
                stack.append((item, current_level + 1))
    
    # 按层级排序后输出
    return [[level, total] for level, total in sorted(level_sums.items())]

逻辑说明

  • 用栈存储待遍历的列表及其对应的层级,每次从栈中取出一个元素处理
  • 处理逻辑和递归版本一致:整数累加,子列表压入栈等待处理(层级+1)
  • 最终同样将字典转换为排序后的二维列表

测试示例:

sample_input = [1,4,[3,[100]],3,2,[1,[101,1000],5],1,[7,9]]
print(calculate_level_sums_iterative(sample_input))
# 输出:[[0, 11], [1, 25], [2, 1201]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 08:50:25