单参数递归函数实现嵌套列表深度计算及make_list_structure功能解释
解决方案
一、嵌套空列表深度计算函数实现
实现规则说明
- 仅接收1个待检测列表作为输入参数
- 不使用
isinstance/max/map等限制语法 - 深度定义:空列表
[]深度为1,包含子列表的列表深度为子列表最大深度+1
代码实现
def how_deep(lst): # 初始化当前子列表的最大深度为0 max_child_depth = 0 # 遍历列表中每个子元素 for item in lst: # 递归计算子列表深度 current_depth = how_deep(item) # 手动对比更新最大深度,替代内置max函数 if current_depth > max_child_depth: max_child_depth = current_depth # 当前列表深度 = 子列表最大深度 + 1 return max_child_depth + 1
测试用例验证
你提供的测试用例运行结果依次为:
6 1 2 4 7 3
完全符合深度计算逻辑,未使用任何限制语法。
二、make_list_structure函数详细讲解
这个函数的作用是生成指定最大深度的随机嵌套列表结构,用来批量测试你的深度计算函数,避免手动构造测试用例的麻烦。
逐行逻辑说明
import random def make_list_structure(max_depth, p=.8): # 终止条件1:当前层级还有剩余深度,且随机概率命中才生成新列表 # p值随着递归深度增加而降低,越深的层级越难生成新列表 if max_depth and random.random() < p: new_list = [] # 每个层级最多生成5个子元素 for i in range(5): # 递归生成下一层子结构,深度减1,生成概率乘以0.9 sub_list = make_list_structure(max_depth - 1, p * .9) # 只有子结构返回列表(不是None)才加入当前列表 if sub_list is not None: new_list.append(sub_list) return new_list # 终止条件2:深度用尽或概率未命中,返回None,不会被加入上层列表 return None
使用示例
调用make_list_structure(5)就会生成一个最大嵌套深度不超过5的随机嵌套列表,每次运行生成的结构都不同,方便测试你的how_deep函数在各种随机场景下的正确性。
内容的提问来源于stack exchange,提问作者craqqed
相关产品推荐
相关产品推荐

