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

如何使用recursion递归将含字符串与列表的嵌套列表转换为普通一维列表

递归实现嵌套列表扁平化方案

完全可以通过递归实现任意深度、由列表和字符串构成的嵌套列表转一维列表,这也是递归非常典型的适用场景。

核心实现逻辑

  • 遍历待处理嵌套结构的每一个元素
  • 若当前元素为列表类型,对该元素递归调用扁平化函数,将返回的结果合并到总结果集
  • 若当前元素为非列表类型(即需求中的字符串),直接将元素添加到总结果集

代码实现(Python示例)

def flatten(nested_list):
    res = []
    for item in nested_list:
        # 仅列表类型触发递归,避免拆分字符串
        if isinstance(item, list):
            res.extend(flatten(item))
        else:
            res.append(item)
    return res

测试效果

输入:["文本1", ["文本2", ["文本3", "文本4"], "文本5"], "文本6"]
输出:["文本1", "文本2", "文本3", "文本4", "文本5", "文本6"]

递归使用技巧指导

针对递归不熟练的情况,可以参考以下技巧降低实现难度:

  • 优先写终止条件:递归逻辑的第一步永远先定义终止触发规则,本场景的终止条件就是「当前元素不是列表」,不需要继续拆解,直接返回即可,先写好终止逻辑可以避免出现栈溢出问题。
  • 只处理当前层级逻辑:不用提前考虑深层嵌套的处理规则,只要保证当前层级的每个元素处理逻辑正确,深层嵌套会自动被递归逻辑覆盖。
  • 提前明确边界规则:如果后续场景中新增了其他数据类型,提前在判断分支中补充对应处理规则即可,比如需要同时拆解元组的话,只需将判断条件修改为isinstance(item, (list, tuple))。
  • 调试时加层级标识:初期理解递归执行顺序有困难时,可以给函数加一个层级参数,每次递归时层级+1,同时打印当前处理的元素和对应层级,可以直观看到递归的调用路径。

注意:Python中字符串属于可迭代对象,请勿用「是否可迭代」作为递归触发判断条件,否则会导致字符串被拆分为单个字符,不符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 13:24:03