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

Python中map为何比列表推导式略快?

map(int, numpy数组)为何比列表推导式更快?

测试场景

In [1]: import numpy as np   
In [2]: a1 = np.random.rand(100000)*31  
In [3]: %%timeit
   ...: a2 = [int(a) for a in a1]
   12.3 ms ± 156 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
In [4]: %%timeit
    ...: a2 = list(map(int, a1))
    9.58 ms ± 191 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

测试结果显示list(map(int, a1))的执行速度略快于列表推导式,以下是具体分析:

性能差异的原因

  • 底层实现差异:map是CPython内置的纯C实现工具,它直接将目标函数(此处为int)和可迭代对象传递给底层C逻辑处理,全程无需在Python解释器层面反复执行循环体的变量绑定、表达式求值操作。
  • 解释器开销减少:列表推导式本质是Python层面的循环结构,每一次迭代都要触发Python解释器对int(a)表达式的解析、求值,这会产生额外的解释器调用开销;而map直接在C层完成函数调用,避免了这部分累积损耗。
  • 迭代协议适配:对于numpy数组这类实现了迭代器协议的对象,map的C实现能更直接地调用其迭代接口,减少了Python层面对迭代过程的封装开销。

是否属于预期情况

这完全是预期现象。在处理单一函数映射的简单迭代场景时,map因更低的解释器开销,通常会比列表推导式有轻微的性能优势;当迭代规模越大,这种差异会越明显。但如果迭代逻辑涉及复杂的多步骤表达式,列表推导式的可读性和性能表现会更均衡,甚至可能反超。

深入了解的资料方向

  • 阅读Python官方文档中map函数和列表推导式的章节,明确两者的设计定位与执行逻辑。
  • 研究CPython源码中map的C实现(如Objects/mapobject.c)和列表推导式的编译过程,直观理解底层执行的差异。
  • 学习Python迭代器协议、函数调用的底层机制,掌握纯C实现与Python层面执行的开销区别。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 04:35:29