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
相关产品推荐
相关产品推荐

