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

如何在Python中高效合并多层嵌套列表为一维列表?

部分嵌套列表的扁平化实现

你用sum()失败是因为sum(list, [])只能合并顶层的列表元素,对于嵌套更深的子列表(比如你示例中的[[a,b,c]]),它会把整个子列表当作单个元素直接加入结果,最终得到[[a,b,c],e,f,g,h,i,j],达不到完全扁平化的效果。

下面是几种高效的实现方式:

1. 递归展开(简洁直观)

适合嵌套深度不太大的场景,代码逻辑清晰:

def flatten(lst):
    merged = []
    for item in lst:
        # 判断当前元素是否为列表,是则递归展开,否则直接添加
        if isinstance(item, list):
            merged.extend(flatten(item))
        else:
            merged.append(item)
    return merged

# 测试示例
original_list = [[['a','b','c'], 'e', 'f', 'g'], 'h', 'i', 'j']
merged_list = flatten(original_list)
print(merged_list)  # 输出: ['a', 'b', 'c', 'e', 'f', 'g', 'h', 'i', 'j']

2. 迭代式展开(避免递归深度限制)

如果你的列表嵌套极深,递归可能触发RecursionError,用栈实现的迭代方法更稳妥:

def flatten_iterative(lst):
    stack = list(lst)
    merged = []
    while stack:
        item = stack.pop()
        if isinstance(item, list):
            # 把列表元素重新压入栈,继续处理
            stack.extend(item)
        else:
            merged.append(item)
    # 因为pop是从栈尾取元素,结果顺序会反转,最后要倒回来
    return merged[::-1]

# 测试示例
original_list = [[['a','b','c'], 'e', 'f', 'g'], 'h', 'i', 'j']
merged_list = flatten_iterative(original_list)
print(merged_list)

3. 生成器实现(内存友好)

如果处理的是超大列表,生成器可以逐个产生元素,避免一次性占用大量内存:

def flatten_generator(lst):
    for item in lst:
        if isinstance(item, list):
            # 用yield from递归生成展开后的元素
            yield from flatten_generator(item)
        else:
            yield item

# 测试示例
original_list = [[['a','b','c'], 'e', 'f', 'g'], 'h', 'i', 'j']
merged_list = list(flatten_generator(original_list))
print(merged_list)

补充说明

如果你的元素中包含字符串、元组等其他可迭代对象,需要调整判断条件(比如排除字符串:isinstance(item, list) or (hasattr(item, '__iter__') and not isinstance(item, (str, bytes)))),但从你的示例来看,当前的判断逻辑已经足够。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 21:50:34