Python递归展开嵌套列表返回None问题排查
排查递归展开序列函数返回None的问题
你的函数返回None大概率是两个常见错误导致的:没有返回最终收集的结果列表,或者递归调用时没有合并子序列的展开结果。
典型错误代码示例
比如你可能写出这样的代码:
def unpack_seq(lst): result = [] for item in lst: if isinstance(item, (list, tuple)): # 错误:递归调用但没处理返回的展开结果 unpack_seq(item) else: result.append(item) # 错误:没有返回result,函数默认返回None
修复后的正确实现
def unpack_seq(seq): result = [] for item in seq: # 仅针对需要展开的列表/元组类型判断 if isinstance(item, (list, tuple)): # 递归展开子序列,并用extend将结果合并到主列表 result.extend(unpack_seq(item)) else: # 非容器元素直接添加 result.append(item) # 必须返回最终收集的结果 return result
测试验证
运行示例输入:
lst = [5,2,3,[4,5, (6,7, [9])]] print(unpack_seq(lst)) # 输出: [5, 2, 3, 4, 5, 6, 7, 9]
关键修复点说明
- 递归结果合并:递归调用子序列时,要把
unpack_seq(item)返回的展开列表用extend添加到主结果里,而不是只调用函数不处理返回值。 - 返回结果列表:函数末尾必须
return result,否则Python函数默认返回None。 - 类型判断精准:只针对
list和tuple做展开判断,避免误处理字符串这类不需要展开的可迭代对象(如果需要处理其他容器类型,可以自行添加到判断条件里)。
内容的提问来源于stack exchange,提问作者Kris
相关产品推荐
相关产品推荐

