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

Python中按对应索引合并子列表的实现问题求助

解决Python二维列表对应索引子列表合并的问题

没问题,我来帮你搞定这个子列表合并的需求!要实现把data1和data2中相同索引位置的子列表拼接在一起,其实有几种简洁又高效的写法,我一个个给你拆解:

方法一:Pythonic的列表推导式(推荐)

这是最简洁的写法,利用zip()函数把两个列表对应位置的子列表配对,再直接拼接:

data1 = [[4,5,9],[4,7,2],[11,13,15]]
data2 = [[1,2,3,7],[3,6,8,5],[12,10,15,17]]

# 核心代码一行搞定
data = [d1 + d2 for d1, d2 in zip(data1, data2)]

print(data)

运行后输出的结果就是你想要的:

[[4,5,9,1,2,3,7], [4,7,2,3,6,8,5], [11,13,15,12,10,15,17]]

原理说明:zip(data1, data2)会把两个列表中同索引的子列表打包成元组(比如第一个元组是(data1[0], data2[0])),然后我们对每个元组里的d1和d2执行列表拼接操作d1 + d2,最后把所有拼接后的子列表收集成新的列表。

方法二:兼容不同长度列表的进阶写法

如果data1和data2的长度不一样(比如一个有3个子列表,另一个有5个),zip()只会处理到较短列表的长度。要是想保留所有子列表(多出来的子列表直接保留原样),可以用itertools.zip_longest:

from itertools import zip_longest

data1 = [[4,5,9],[4,7,2],[11,13,15]]
data2 = [[1,2,3,7],[3,6,8,5],[12,10,15,17], [99, 88]]  # 故意加一个额外的子列表

# 处理长度不一致的情况,缺失的子列表用空列表填充
data = [d1 + d2 if d1 and d2 else d1 or d2 for d1, d2 in zip_longest(data1, data2, fillvalue=[])]

print(data)

运行结果会保留data2多出来的子列表:

[[4,5,9,1,2,3,7], [4,7,2,3,6,8,5], [11,13,15,12,10,15,17], [99, 88]]

方法三:新手友好的普通循环写法

如果你刚接触Python,想用更直观的循环来实现,也可以这样写:

data1 = [[4,5,9],[4,7,2],[11,13,15]]
data2 = [[1,2,3,7],[3,6,8,5],[12,10,15,17]]

data = []
# 先判断两个列表长度是否一致(可选,避免索引越界)
if len(data1) != len(data2):
    raise ValueError("两个列表的子列表数量不一致,请检查数据")

# 遍历每个索引,拼接对应子列表
for i in range(len(data1)):
    merged_sublist = data1[i] + data2[i]
    data.append(merged_sublist)

print(data)

这个写法逻辑清晰,每一步都能看明白,适合新手理解和调试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:24:46