Python如何按索引合并3个数字列表得到指定顺序的新列表
按索引归集多列表元素的实现方案
你要的效果是按索引顺序,依次取出每个列表同位置的元素拼接,最终得到顺序为「所有列表第0位元素、所有列表第1位元素、所有列表第2位元素……」的新列表,以下是两种常用实现:
方法1:通用灵活写法(推荐)
用Python内置的zip函数实现,它的作用就是将多个可迭代对象中同索引的元素打包成元组,刚好匹配你的需求,而且不限制传入列表的数量:
def merge_lists_by_index(*input_lists): merged = [] for same_index_items in zip(*input_lists): merged.extend(same_index_items) return merged # 测试用例 list1 = [1, 2, 3] list2 = [4, 5, 6] list3 = [7, 8, 9] print(merge_lists_by_index(list1, list2, list3)) # 输出结果:[1, 4, 7, 2, 5, 8, 3, 6, 9]
想要更精简的话可以直接写成列表推导式:
def merge_lists_by_index(*input_lists): return [item for item_group in zip(*input_lists) for item in item_group]
方法2:固定3个列表的直白写法
如果确定永远只处理3个固定长度的列表,也可以直接按索引遍历,逻辑一眼能看懂:
def merge_three_lists(l1, l2, l3): result = [] for idx in range(len(l1)): result.append(l1[idx]) result.append(l2[idx]) result.append(l3[idx]) return result
补充说明
- 上述写法默认所有输入列表长度一致。如果列表长度不等,
zip会自动以最短的列表为准截断输出;如果需要保留长列表多出的元素,可以替换为标准库itertools中的zip_longest。 - 两种写法的输出都和你给出的预期结果完全一致。
内容的提问来源于stack exchange,提问作者Somebody
相关产品推荐
相关产品推荐

