Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中索引运算符的快速方法(lambda i:l[i])_Python_Micro Optimization - Fatal编程技术网

Python中索引运算符的快速方法(lambda i:l[i])

Python中索引运算符的快速方法(lambda i:l[i]),python,micro-optimization,Python,Micro Optimization,给定一个可索引的数据结构,如列表l,我们如何获得与lambda i:l[i]等效的最快函数?lambda函数的问题在于它是Python,会减慢速度。operator模块中有一些内置操作符,但在这种情况下似乎没有一个可以使用 l.\uuu getitem\uuuu的速度是它的两倍多,而且由于这是对象自己的方法,我怀疑你能打败它 >>> timeit('f(i)', 'l=[1,2,3]; i=1; f=lambda i:l[i]', number=10**8) 17.013631

给定一个可索引的数据结构,如列表
l
,我们如何获得与
lambda i:l[i]
等效的最快函数?lambda函数的问题在于它是Python,会减慢速度。
operator
模块中有一些内置操作符,但在这种情况下似乎没有一个可以使用

l.\uuu getitem\uuuu
的速度是它的两倍多,而且由于这是对象自己的方法,我怀疑你能打败它

>>> timeit('f(i)', 'l=[1,2,3]; i=1; f=lambda i:l[i]', number=10**8)
17.013631199999963
>>> timeit('f(i)', 'l=[1,2,3]; i=1; f=l.__getitem__', number=10**8)
7.722098399999936

l.\uuu getitem\uuuu
?我想你很难找到比这更快的函数。从技术上讲,您可以使用
l.\uuuu getitem\uuuuu
,但我怀疑这样做会更快(当然,对于您可以使用的任何基准测试来说,它都足够接近误差范围),并且调用伪私有方法(名称以两个下划线开头和结尾的方法)是一种不好的做法直接。@mypetlion
l.\uuu getitem\uuuu
在我的测试中速度是原来的两倍多,分别是7.5秒和16.3秒(对于1e8调用)。如果您担心速度,那么重复索引列表可能是错误的方法。