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

Python3中如何交错合并多个可变长度列表?

Python3中交错合并多个可变长度列表的正确方法

刚好碰到过类似的问题,Python3里用itertools.zip_longest就能完美解决你的需求,它就是专门用来替代Python2中map(None)处理不等长序列的工具。

先看针对你给出的示例的完整代码:

from itertools import zip_longest

l1=[1,2,3]
l2=[10,20,30]
l3=[101,102,103,104]

# 交错合并并过滤掉填充的None
merged_list = [y for x in zip_longest(l1, l2, l3) for y in x if y is not None]
print(merged_list)
# 输出结果: [1, 10, 101, 2, 20, 102, 3, 30, 103, 104]

为什么这个方法可行?

  • zip_longest会遍历所有输入列表,直到最长的那个列表元素耗尽,对于较短列表中缺失的位置,默认用None来填充(你也可以通过fillvalue参数指定其他填充值)。
  • 之后通过列表推导式,我们把打包后的元组扁平化,同时过滤掉用来填充的None,就得到了和Python2中map(None)完全一致的效果。

为什么你的lambda方法会截断?

你写的map(func,l1,l2,l3)其实等价于内置的zip(l1,l2,l3)——zip会在最短的列表元素耗尽后就停止遍历,所以才会出现截断的问题,而zip_longest正好补上了这个短板。

额外小提示

如果你的列表中本身就包含None作为有效元素,可以指定一个不会和列表元素冲突的填充值,比如:

merged_list = [y for x in zip_longest(l1, l2, l3, fillvalue='__FILL__') for y in x if y != '__FILL__']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:17:13