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

如何将列表的列表的元组展开为单个元组列表?

解决方案:扁平化嵌套列表为元组列表

好问题!既然你已经掌握了基础的嵌套循环实现,这里有几种更简洁高效的写法可以达到同样的效果:

1. 列表推导式(最直观的替代方案)

列表推导式本质就是把你的嵌套循环转换成一行代码,逻辑完全一致:

a = [[(1, 2), (3, 4), (5, 6)], [(7, 8), (9, 10)]]
b = [t for c in a for t in c]
print(b)  # 输出: [(1, 2), (3, 4), (5, 6), (7, 8), (9, 10)]

这里的顺序和你写的循环完全对应:先遍历a中的每个子列表c,再遍历c中的每个元组t,把t逐个收集到新列表里。

2. 使用itertools.chain(高效的标准库方案)

Python的itertools模块提供了专门处理可迭代对象的工具,chain可以帮你把多个可迭代对象“链”在一起,非常适合扁平化操作:

from itertools import chain

a = [[(1, 2), (3, 4), (5, 6)], [(7, 8), (9, 10)]]
# 两种写法都可以:
b = list(chain(*a))  # 解包a中的子列表作为chain的参数
# 或者更推荐的写法(不需要解包,适合生成器/大列表):
b = list(chain.from_iterable(a))

print(b)  # 输出: [(1, 2), (3, 4), (5, 6), (7, 8), (9, 10)]

这个方法的优势是效率更高,尤其是当你的嵌套列表非常大的时候,它不会像列表推导式那样一次性生成所有元素(当然转成列表还是会的,但chain本身是惰性迭代的)。

3. 用sum的小技巧(最简短但不推荐大数据量)

如果你追求极致的简短,可以用sum函数来拼接列表:

a = [[(1, 2), (3, 4), (5, 6)], [(7, 8), (9, 10)]]
b = sum(a, [])
print(b)  # 输出: [(1, 2), (3, 4), (5, 6), (7, 8), (9, 10)]

原理是sum会把a中的每个子列表和初始值[]依次相加(列表相加就是拼接)。但要注意:这个方法对于大列表来说效率很低,因为每次列表相加都会创建一个新的列表,数据量越大性能越差,所以只适合小数据量的场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:29:58