Python如何按特定顺序合并列表?含三列表合并实例
如何在Python中按特定顺序合并列表?
嘿,这个问题很清晰!你想要的是一种按索引轮询式的列表合并——简单说就是按顺序从每个列表里取当前索引的元素,直到所有列表的元素都被取完。咱们先拆解你的具体例子,再给出通用解法。
先看你的需求规律
给定输入:
l1 = [0, 0] l2 = [1, 1, 1] l3 = [2, 2, 2]
期望输出是 [0, 1, 2, 0, 1, 2, 1, 2],拆解下来其实是按索引分“轮”取元素:
- 第0轮:取三个列表的第0个元素 →
0, 1, 2 - 第1轮:取三个列表的第1个元素 →
0, 1, 2 - 第2轮:l1已经没有第2个元素了,只取l2和l3的第2个元素 →
1, 2
把这几轮的结果连起来就是最终的合并列表。
基础实现方式
最直观的写法就是手动遍历索引,逐个检查每个列表是否有当前索引的元素,有的话就加入结果:
l1 = [0, 0] l2 = [1, 1, 1] l3 = [2, 2, 2] merged = [] # 先找到最长列表的长度,确定要遍历多少轮 max_len = max(len(l1), len(l2), len(l3)) for idx in range(max_len): # 依次检查每个列表 if idx < len(l1): merged.append(l1[idx]) if idx < len(l2): merged.append(l2[idx]) if idx < len(l3): merged.append(l3[idx]) print(merged) # 输出: [0, 1, 2, 0, 1, 2, 1, 2]
通用化解法(支持任意数量的列表)
如果以后要合并更多列表,上面的写法就太繁琐了。可以把所有列表放到一个容器里,用嵌套循环来处理:
l1 = [0, 0] l2 = [1, 1, 1] l3 = [2, 2, 2] lists_to_merge = [l1, l2, l3] merged = [] max_len = max(len(lst) for lst in lists_to_merge) for idx in range(max_len): for lst in lists_to_merge: if idx < len(lst): merged.append(lst[idx]) print(merged) # 同样得到正确结果
更简洁的写法(用itertools工具)
Python的itertools模块里有个zip_longest函数,可以帮我们把多个列表按索引分组,短列表会用None填充。我们只需要过滤掉这些None,再把所有元素连起来就行:
from itertools import zip_longest l1 = [0, 0] l2 = [1, 1, 1] l3 = [2, 2, 2] lists_to_merge = [l1, l2, l3] merged = [] # zip_longest(*lists_to_merge)会生成每个索引对应的元素组,短列表补None for group in zip_longest(*lists_to_merge): # 过滤掉None,把有效元素加入结果 merged.extend(item for item in group if item is not None) print(merged) # 输出一致
这种方法代码更简洁,而且同样支持任意数量的列表,非常适合日常开发使用。
内容的提问来源于stack exchange,提问作者Shahar
相关产品推荐
相关产品推荐

