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

如何更简洁编写嵌套列表扁平化代码?求优化现有实现

更优雅的多层嵌套列表展平方案

嘿,我懂你那种看到一堆嵌套chain调用就头大的感觉——这代码确实太杂乱了,可读性和维护性都差。这里有几个更优雅的方案来处理这种多层嵌套列表的展平需求:

1. 递归生成器(通用方案,适配任意嵌套层数)

如果你的列表嵌套层数不固定,或者以后可能会变化,递归生成器是最灵活的选择,代码清晰且易维护:

from itertools import chain

def flatten(nested_iterable):
    for item in nested_iterable:
        if isinstance(item, list):
            yield from flatten(item)
        else:
            yield item

numberlist1 = [[[1,2]]]
numberlist2 = [[[1,2]]]

# 先合并两个列表,再展平
result = list(flatten(chain(numberlist1, numberlist2)))
print(result)  # 输出: [1, 2, 1, 2]

这个生成器会自动遍历每一层嵌套,遇到列表就继续递归展开,遇到非列表元素就直接返回,不管你的列表嵌套3层还是10层都能处理。

2. 分步调用chain.from_iterable(固定嵌套层数)

如果能确定嵌套层数是固定的(比如这里都是3层),可以把每一步的展平操作拆分开来,比嵌套写法可读性高很多:

from itertools import chain

numberlist1 = [[[1,2]]]
numberlist2 = [[[1,2]]]

# 第一步:合并两个列表
combined = chain(numberlist1, numberlist2)
# 第二步:展平第一层嵌套
level1_flat = chain.from_iterable(combined)
# 第三步:展平第二层嵌套,得到最终结果
result = list(chain.from_iterable(level1_flat))

每一步都有明确的意义,即使过一段时间再看代码,也能立刻明白每一步在做什么,不会像原来的嵌套写法那样让人困惑。

3. 嵌套列表推导式(固定嵌套层数,无需导入模块)

如果不想依赖itertools模块,对于固定层数的嵌套,用嵌套列表推导式也能写出简洁易读的代码:

numberlist1 = [[[1,2]]]
numberlist2 = [[[1,2]]]

result = [num 
          for sublist in chain(numberlist1, numberlist2)
          for subsublist in sublist
          for num in subsublist]

这种写法把每一层的遍历逻辑清晰地列出来,没有多余的嵌套调用,代码紧凑且直观。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:24:03