比较列表中搜索算法的执行时间,我发现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
那样简单地在列表上进行相同的迭代?
答案 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快)