在 Python 中对列表求和的最有效方法

Rya*_*yan -1 python performance python-2.x

A在 Python 中获取整数列表总和的方法有以下两种:

  1. 内置sum功能:sum(A)

  2. 使用加法器 lambda 减少函数: reduce(lambda x, y: x + y, A)

使用其中任何一个是否有速度优势,或者它们的性能大致相同?

hft*_*hft 5

在 Python 中获取整数列表 A 的总和的方法有以下两种:

内置求和函数:sum(A)

使用加法器 lambda 减少函数:reduce(lambda x, y: x + y, A)

使用其中任何一个是否有速度优势,或者它们的性能大致相同?

在我的机器上,“sum”函数似乎比“reduce”版本快得多(至少对于对 5000 个大小为 1000 的数组求和)。

看:

$ cat doit.py   
from timeit import timeit
print timeit('reduce(lambda x, y: x + y, range(1000))',number=5000)
print timeit('sum(range(1000))',number=5000)

$ python2 doit.py
0.460000038147
0.0599999427795
Run Code Online (Sandbox Code Playgroud)

更新:为了解决评论,我更新了我的答案,还包括一个用于创建要求和的数组的“设置”:

$ cat doit2.py
from timeit import timeit

print timeit('reduce(lambda x, y: x + y, a)',setup='a=range(1000)',number=5000)
print timeit('sum(a)',setup='a=range(1000)',number=5000)

$ python2 doit2.py
0.530030012131
0.0320019721985
Run Code Online (Sandbox Code Playgroud)

同样,“总和”版本似乎是明显的赢家。