在Python中查找函数调用结果的最快方法(不进行并行处理)是什么?
想象一下xlist是一个值列表,目的是用它们转换每个值f(x)并总结.现在(记住"平坦总是更好")我有:
sum([f(x) for x in xlist])
Run Code Online (Sandbox Code Playgroud)
这工作得很好,但我xlist是相当大的(〜20000浮点值)和我的程序的执行过程中这笔款项被称为几百万次,消耗掉大部分的时间资源.有没有办法以更有效的方式实现它?
我不介意加入C++夹杂或你能想到的任何其他方法,但不希望改变整个程序的结构的缘故吧...
摆脱方括号应该可以解决问题.
sum(f(x) for x in xlist)
Run Code Online (Sandbox Code Playgroud)
这将对生成器表达式求和,并且无需首先创建存储在内存中的列表.相反,它会在迭代生成器时对元素求和.
在Python 3中,使用map(itertools.imap在Python 2中)将会更快一些.
import itertools
sum(itertools.imap(f, xlist))
Run Code Online (Sandbox Code Playgroud)
您可以进行的进一步优化(因为sum将被称为公平几次)将消除使用.运算符的开销.
from itertools import imap
sum(imap(f, xlist))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1465 次 |
| 最近记录: |