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

如何以Pythonic方式合并含不同长度元组的列表组成的列表?

合并元组列表的Pythonic实现方案

直接用列表推导式+zip就能简洁解决这个问题,代码如下:

start = [(3,5), (23,50), (5,12), (51,33), (43,1)]
end = [(23,19), (7,2), (34,4), (8,30), (20,10)]
path = [[(10,7),(14,9),(18,15)], [], [(15,7)], [(42,32),(20,31)], [(30,7)]]

whole_path = [[s] + p + [e] for s, p, e in zip(start, path, end)]

逻辑说明

  1. zip(start, path, end)会将三个列表中对应位置的元素打包成元组(比如第一个元组是((3,5), [(10,7),(14,9),(18,15)], (23,19))),正好匹配每个线条对象的起点、路径、终点。
  2. 列表推导式中,[s]把单个起点元组转成列表,和路径列表p、转成列表的终点[e]直接拼接,不管p是空列表还是包含多个元组,拼接逻辑都能正常生效。

为什么之前的尝试没成功?

你提到的zip其实完全适用——你之前的误解可能是以为它要处理元组长度的差异,但实际上zip负责的是三个大列表的元素配对,元组/子列表的长度差异由列表拼接逻辑自动处理。而path.insert(0,start)这类操作是错误地修改了整个path列表的结构,没有对应到单个元素的拼接。

运行上述代码后,whole_path的结果和你期望的完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 04:45:49