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

为何itertools.chain比扁平化列表推导式更快?

Python序列拼接的高效方法&效率对比

刚好之前折腾过Python里字符串和列表拼接的效率问题,来跟大家唠唠实用的方法和实测结果:

一、字符串序列拼接

如果要把一堆字符串拼起来,绝对优先用''.join([str1, str2, ...]),别用str1 + str2 + ...这种方式。原因很简单:Python里字符串是不可变对象,每次+都会生成新的字符串并拷贝内容,次数多了内存和时间开销都很大;而join会先计算总长度,一次性分配内存再拼接,效率甩+好几条街。

二、列表序列拼接

拼接多个列表的话,常见的有两种方法,实测下来itertools.chain始终比列表推导式更快,给大家看看测试代码和结果:

先上测试代码:

import random
import itertools
import timeit

random.seed(100)
# 生成10个各含1000个随机整数的列表
lsts = [[random.randint(0, 100) for _ in range(1000)] for _ in range(10)]

# 测试itertools.chain方法
def test_chain():
    return list(itertools.chain(*lsts))

# 测试列表推导式方法
def test_list_comp():
    return [x for lst in lsts for x in lst]

# 各跑1000次计时
print("itertools.chain 耗时:", timeit.timeit(test_chain, number=1000))
print("列表推导式 耗时:", timeit.timeit(test_list_comp, number=1000))

我本地跑出来的结果大概是itertools.chain耗时0.12左右,列表推导式耗时0.18左右(具体数值随环境略有差异,但chain更快是肯定的)。

为什么itertools.chain更快?因为它是用C实现的迭代器,不会生成中间列表,只是逐个迭代返回元素;而列表推导式虽然也是高效的写法,但本质还是Python层面的循环逻辑,在底层效率上比不过C实现的工具函数。

总结一下

  • 字符串拼接:选str.join()准没错
  • 多列表拼接:优先用list(itertools.chain(lst1, lst2, ...)),比列表推导式更高效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:14:44