python 巨大的性能差异数组迭代与 "if in"

python massive performance difference array iteration vs "if in"

下面的两个代码片段都检查数组中是否存在元素,但第一种方法耗时 < 100 毫秒,而第二种方法耗时约 6 秒。

有谁知道为什么吗?

import numpy as np
import time

xs = np.random.randint(90000000, size=8000000)

start = time.monotonic()
is_present = -4 in xs

end = time.monotonic()

print( 'exec time:', round(end-start, 3) , 'sec ') // 100 milliseconds

start = time.monotonic()
for x in xs:
  if (x == -4):
    break

end = time.monotonic()

print( 'exec time:', round(end-start, 3) , 'sec ') // 6000 milliseconds ```

repl link

numpy 是专门为加速这种代码而构建的,它是用 c 编写的,几乎所有的 python 开销都被删除了,相比之下你的第二次尝试是纯粹的 python 所以它需要更长的时间遍历所有元素