递归实现depth_map函数:嵌套列表元素深度统计问题求助
解决方案
直接给出符合要求的递归实现代码:
def depth_map(nested_list): depth_dict = {} def traverse(item, current_depth): if isinstance(item, int): # 将整数添加到对应深度的列表中 if current_depth not in depth_dict: depth_dict[current_depth] = [] depth_dict[current_depth].append(item) elif isinstance(item, list): # 递归遍历子列表,深度加1 for elem in item: traverse(elem, current_depth + 1) # 初始调用:从最外层列表开始,初始深度为0 traverse(nested_list, 0) return depth_dict
代码解释
核心逻辑:
- 用辅助递归函数
traverse处理遍历和深度跟踪,主函数负责初始化结果字典并触发递归流程。 - 递归终止条件:当处理的元素是
int时,将其加入对应深度的列表;如果是list,则遍历每个子元素,递归调用时深度加1(子元素被多一层列表包裹)。
- 用辅助递归函数
深度规则对应:
- 针对示例输入
[19, [[22]], [-3, [8], 47]]:- 19在最外层列表中,初始深度0加1后为1,对应字典键
1; - 22被三层列表包裹(最外层→[[22]]→[22]),递归时深度从0逐步加至3,对应键
3; - -3和47被两层列表包裹(最外层→[-3, [8], 47]),深度为2,对应键
2。
- 19在最外层列表中,初始深度0加1后为1,对应字典键
- 针对示例输入
函数设计准则遵循:
- 单一职责:主函数负责初始化和返回结果,辅助函数专注于遍历与深度计算;
- 递归逻辑清晰:每次递归仅处理当前元素类型,要么终止(处理int),要么继续递归(处理list);
- 效率优化:结果字典在递归过程中共享,避免重复创建冗余结构。
测试验证
运行示例输入:
print(depth_map([19, [[22]], [-3, [8], 47]]))
输出:
{1: [19], 3: [22, 8], 2: [-3, 47]}
完全符合要求。
内容的提问来源于stack exchange,提问作者nima kazemi
相关产品推荐
相关产品推荐

