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

Python如何快速展开列表中的嵌套元素?

Python中快速展开嵌套列表的方法

当然有啦!针对你这种混合了嵌套列表和单个元素的场景,我给你分享几个实用的快速展开方案,都能完美处理你给出的例子:

方法一:递归函数(通用且易理解)

递归是最直观的方式,不管嵌套多少层都能搞定。我们写一个简单的函数,遍历每个元素,如果是列表就继续递归展开,否则直接加入结果:

def flatten(lst):
    result = []
    for item in lst:
        if isinstance(item, list):
            result.extend(flatten(item))
        else:
            result.append(item)
    return result

# 测试你的例子
original_list = [[1,2,3],[4,2],2,1,3]
print(flatten(original_list))  # 输出: [1,2,3,4,2,2,1,3]

方法二:迭代法(避免递归深度问题)

如果你的嵌套层级特别深,递归可能会碰到栈溢出的问题,这时候迭代法更稳妥。用栈来模拟递归过程:

def flatten_iterative(lst):
    stack = list(lst)
    result = []
    while stack:
        item = stack.pop()
        if isinstance(item, list):
            stack.extend(item)
        else:
            result.append(item)
    # 因为用了pop,结果是倒序的,所以要反转回来
    return result[::-1]

# 测试
print(flatten_iterative(original_list))  # 输出: [1,2,3,4,2,2,1,3]

方法三:一行式列表推导(简洁党最爱)

如果你喜欢简洁的代码,可以用递归结合列表推导式,一行搞定:

flatten = lambda lst: [x for item in lst for x in (flatten(item) if isinstance(item, list) else [item])]

# 测试
print(flatten(original_list))  # 输出: [1,2,3,4,2,2,1,3]

额外注意点

如果你的列表里包含字符串(比如["abc", [1,2]]),上面的方法会把字符串拆成单个字符。如果你想保留字符串不拆分,可以修改判断条件,排除字符串类型:

def flatten_with_strings(lst):
    result = []
    for item in lst:
        if isinstance(item, list) and not isinstance(item, str):
            result.extend(flatten_with_strings(item))
        else:
            result.append(item)
    return result

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 02:23:42