我做了一个实验,试图找出搜索 python 列表所需的时间。我有一个arr
随机整数列表。arr_s
仅对相同的元素进行排序。
arr = np.random.randint(low = 0, high = 1000, size = 500)
arr_s = sorted(arr)
现在我创建一个随机整数数组,find
其中包含我想要在arr
和中搜索的元素arr_s
。
>>> %%timeit
...:find = np.random.randint(0, 1000, 600)
...:for i in find:
...: if i in arr:
...: continue
[OUT]:100 loops, best of 3: 2.18 ms per loop
>>> %%timeit
...:find = np.random.randint(0, 1000, 600)
...:for i in find:
...: if i in arr_s:
...: continue
[OUT]:100 loops, best of 3: 5.15 ms per loop
现在我明白了我没有使用任何特定的方法在排序数组中进行搜索(例如二进制搜索)。所以它可能正在执行标准的线性搜索,但为什么在排序数组中搜索比在未排序数组中搜索要花费更长的时间?我认为它应该花费几乎相同的时间。我尝试了各种find
数组。具有 (0, 1000)、(-1000, -100) 和 (-10000, 10000) 整数的数组,对于已排序的数组,循环总是需要更长的时间。