【问题标题】:Fast Way of Indexing Operator in Python (lambda i: l[i])Python中索引运算符的快速方法(lambda i:l [i])
【发布时间】:2020-01-14 18:12:48
【问题描述】:

给定一个可索引的数据结构,如列表l,我们怎样才能得到最快的函数,相当于lambda i: l[i]? lambda 函数的问题在于它是 Python 并且会减慢速度。 operator 模块中有一些内置运算符,但在这种情况下似乎没有一个可以使用。

【问题讨论】:

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

标签: python micro-optimization


【解决方案1】:

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

>>> 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

【讨论】:

    猜你喜欢
    • 2015-06-22
    • 1970-01-01
    • 2013-12-25
    • 2021-01-24
    • 1970-01-01
    • 2015-10-05
    • 2016-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多