为什么python索引函数的执行时间比我自己的线性搜索函数快?

为什么python索引函数的执行时间比我自己的线性搜索函数快?,python,Python,我正在做一个实验,比较索引函数和我自己的线性搜索函数的执行时间。据我所知,Python为索引函数实现了一个线性搜索算法,所以执行时间应该大致相同,不是吗 我自己的搜索函数如下所示 def linearSearch (x,numList,length): n = 0 for i in range(length): n = n + 1 if numList[i] == x: retur

我正在做一个实验,比较索引函数和我自己的线性搜索函数的执行时间。据我所知,Python为索引函数实现了一个线性搜索算法,所以执行时间应该大致相同,不是吗

我自己的搜索函数如下所示

def linearSearch (x,numList,length):      
    n = 0
    for i in range(length):
            n = n + 1
            if numList[i] == x:
                    return i, n
    return -1, n

Python的
list.index
函数以C的速度运行,我看不出您的Python变体如何能够打败它


当然,这是假设您的Python安装使用了CPython。

Python的
list.index
函数以C速度运行,我看不出您的Python变体如何能够打败它


当然,这是假设您的Python安装使用了CPython。

这是一件非常重要的事情
O(N)
不会告诉您操作完成的速度。
仅仅因为您的实现和python的实现都是
O(N)
,这并不意味着它们都需要相同的时间

O(N)
告诉您的是,如果一个实现需要1s来处理100个项目,那么可能需要大约2s来处理200个项目。换句话说,
O(N)
告诉您在算法中花费的时间将如何随着输入大小的变化而变化


在这种情况下,python的搜索总是优于您的搜索,因为python的搜索是在
C
(假设是CPython)中运行的,解释器的开销非常小——而您的实现必须在“python空间”中进行大量查找(相比之下,这是非常昂贵的)


一些具有良好JIT的python实现(例如,
pypy
)将能够减少这种差异,但我怀疑您是否能够打败优化的内置函数的性能。

这是一件非常重要的事情
O(N)
不会告诉您操作完成的速度。
仅仅因为您的实现和python的实现都是
O(N)
,这并不意味着它们都需要相同的时间

O(N)
告诉您的是,如果一个实现需要1s来处理100个项目,那么可能需要大约2s来处理200个项目。换句话说,
O(N)
告诉您在算法中花费的时间将如何随着输入大小的变化而变化


在这种情况下,python的搜索总是优于您的搜索,因为python的搜索是在
C
(假设是CPython)中运行的,解释器的开销非常小——而您的实现必须在“python空间”中进行大量查找(相比之下,这是非常昂贵的)


一些具有良好JIT的python实现(例如,
pypypy
)将能够减少这种差异,但我怀疑您是否能够打败优化的内置函数的性能。

python是用C编写的,其速度恰好是python的5倍左右。这意味着用Python编写的代码大约比用C编写的index()方法慢5倍。

Python是用C编写的,恰好比Python快5倍左右。这意味着用Python编写的代码大约比用C编写的index()方法慢5倍。

否。您的搜索使用的是Python,Python使用的是编译后的C代码(如果您使用的是CPython)。不过时间复杂度是一样的。啊,谢谢你的回复。因此,这两个函数不能直接比较,因为它们使用不同的语言?Python可能没有为
索引
使用Python实现;它可能使用了一些C代码(或者Jython实现的本地语言,等等)。尽管如此,如果您使用的是PyPy,
index
将用Python编写!你可以把
time.sleep(1000)
放在for循环中,它的算法复杂度仍然是O(N)。您的搜索使用的是Python,Python使用的是编译后的C代码(如果您使用的是CPython)。不过时间复杂度是一样的。啊,谢谢你的回复。因此,这两个函数不能直接比较,因为它们使用不同的语言?Python可能没有为
索引
使用Python实现;它可能使用了一些C代码(或者Jython实现的本地语言,等等)。尽管如此,如果您使用的是PyPy,
index
将用Python编写!您可以将
time.sleep(1000)
放入for循环中,其算法复杂性仍然是O(N)。