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
相关产品推荐
相关产品推荐

