为什么“ for ... in ...”比“ list.index()”要慢?

时间:2018-09-13 08:17:56

标签: python list search

比较列表中搜索算法的执行时间,我发现list.index()比简单的for in快得多。根据{{​​3}},它们都应为O(n)。我的测试结果如下:

简单的解决方案在3秒钟内通过了大约350次测试:

def linear_simple(arr):
    for i in range(len(arr)):
        if arr[i] == #my searched value#:
            return i

索引解决方案在3秒内通过了所有2000个测试(实际上甚至在2秒内就完成了):

def linear_index(arr):
    return arr.index( #my searched value# )

所有测试数组都是随机生成的。测试进行了几次,结果相似。

这意味着index()快9倍。为什么? index()是否不像for in那样简单地在列表上进行相同的迭代?

1 个答案:

答案 0 :(得分:1)

正如Chris_Rands所说,list.index是用C实现的。由于它是经过编译而不进行解释的,因此代码的运行速度更快。

无论如何,您可以稍微优化一下代码:

def linear_simple(arr, value):
    for i, e in enumerate(arr):
        if e == value:
            return i

此代码在我的计算机上运行速度更快(但不如list.index快)