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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:14:20