多列表元素按序逐个合并的高效实现方法
你的实现效率分析与最优方案
当前实现的效率
你的代码逻辑可行,但不算最高效。原因在于:
- 每次循环都要创建临时列表
[i, j, k],会产生额外内存开销; - Python 层面的
for循环 +extend操作,执行速度不如内置的底层优化函数。
不过对于小规模列表来说,这种差异几乎可以忽略,只有当列表元素数量非常大时,效率差距才会显现。
最高效的实现方法
推荐两种比你的实现更高效的方案,均利用 Python 内置优化机制:
方案1:使用 itertools.chain.from_iterable + zip
这是性能最优的方案之一,itertools 模块的函数由 C 语言实现,执行速度远快于纯 Python 循环:
import itertools a = [1, 2, 3] b = [4, 5, 6] c = [7, 8, 9] d = list(itertools.chain.from_iterable(zip(a, b, c)))
zip(a, b, c) 会把三个列表对应位置的元素打包成元组(比如 (1,4,7)、(2,5,8)),chain.from_iterable 会把这些元组逐个展开,最终生成目标列表。
方案2:使用嵌套列表推导式
如果不想引入额外模块,嵌套列表推导式也是高效选择,执行效率接近内置函数:
a = [1, 2, 3] b = [4, 5, 6] c = [7, 8, 9] d = [x for trio in zip(a, b, c) for x in trio]
这个推导式先遍历 zip 生成的元组,再逐个取出元组内的元素,逻辑和你的代码一致,但因推导式内部做了优化,速度更快。
补充说明
以上两种方案和你的原代码一样,会以最短的列表长度为基准截断结果。如果需要处理长度不一致的列表并填充默认值,可以用 itertools.zip_longest 替代 zip,示例:
import itertools d = list(itertools.chain.from_iterable(itertools.zip_longest(a, b, c, fillvalue=0)))
内容的提问来源于stack exchange,提问作者AnkS
相关产品推荐
相关产品推荐

