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

Python中列表与生成器迭代速度差异的原因探究

生成器与列表迭代速度差异的原因分析

我之前了解到Python里生成器创建速度比列表快,但列表迭代速度比生成器快。但测试后结果相反:小数据量(10,000,000)下列表迭代更快,大数据量(1,000,000,000)下生成器迭代更快。测试代码及结果如下:

大数据量测试

测试代码

from time import time

my_generator = (i for i in range(1_000_000_000) if i % 2 == 0)

start = time()
for i in my_generator:
    pass
print("Time for Generator iteration - ", time() - start)
my_list = [i for i in range(1_000_000_000) if i % 2 == 0]

start = time()
for i in my_list:
    pass
print("Time for List iteration - ", time() - start)

输出结果

Time for Generator iteration -  67.49345350265503
Time for List iteration - 89.21837282180786

小数据量测试

测试代码

from time import time

my_generator = (i for i in range(10_000_000) if i % 2 == 0)

start = time()
for i in my_generator:
    pass
print("Time for Generator iteration - ", time() - start)

my_list = [i for i in range(10_000_000) if i % 2 == 0]

start = time()
for i in my_list:
    pass
print("Time for list iteration - ", time() - start)

输出结果

Time for Generator iteration -  1.0233261585235596
Time for list iteration -  0.11701655387878418

原因解析

核心差异来自内存访问效率和数据存储方式的影响:

  • 小数据量场景:列表的所有元素能完全装入CPU高速缓存(L1/L2/L3),迭代时直接从缓存读取数据,速度极快;而生成器每次迭代都要实时执行判断(i%2==0)和元素生成操作,这部分计算开销远大于缓存访问的开销,因此列表迭代更快。
  • 大数据量场景:10亿级的列表会占用巨量内存(Python中单个int约占28字节,5亿个元素需约14GB内存),远超CPU缓存甚至物理内存容量,此时迭代列表会频繁触发磁盘交换(Swap)——把内存中暂不使用的数据写入硬盘,再将需要的数据读回内存,这个过程速度极慢;而生成器是按需生成元素,全程仅占用极小内存,不会触发Swap,即便每次迭代有计算开销,整体速度仍远超列表。

另外需要注意:测试中列表推导式本身的生成时间未计入迭代耗时,但这不是核心差异,内存瓶颈才是大数据量下列表迭代变慢的关键。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 19:06:28