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

Python如何优雅实现不等长列表组的逐元素拼接,无需嵌套for循环?

Python实现不等长子列表按位置拼接方案

可以直接使用Python标准库itertools提供的工具完成需求,无需手写嵌套for循环:

兼容所有元素的通用实现

如果列表中可能包含None值,建议使用自定义哨兵值避免误判:

from itertools import zip_longest, chain

lol = [[1,2,3,4],[5,6],[7,8,9,0,11],[21]]
# 自定义唯一哨兵值,不会和列表内任何原有元素冲突
SENTINEL = object()
cl = list(filter(lambda x: x is not SENTINEL, chain.from_iterable(zip_longest(*lol, fillvalue=SENTINEL))))

简化实现(列表无None时可用)

如果可以确定列表中不存在None值,可以直接省略自定义哨兵逻辑:

from itertools import zip_longest, chain

lol = [[1,2,3,4],[5,6],[7,8,9,0,11],[21]]
cl = [elem for elem in chain(*zip_longest(*lol)) if elem is not None]

实现原理

  1. zip_longest(*lol, fillvalue=xxx)会按索引位置对齐所有子列表的元素,长度不足的子列表用填充值补全,针对示例生成的分组依次为(1,5,7,21)、(2,6,8, 填充值)、(3,填充值,9,填充值)等
  2. chain.from_iterable将所有分组的元素依次展开为一维迭代器
  3. 最后过滤掉所有填充值,即可得到按位置拼接的结果列表

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 06:15:07