Python %timeit测试针对类似命令的可变循环数运行

Python %timeit测试针对类似命令的可变循环数运行,python,Python,假设有这样一个数据 In [51]: data = list(range(10**6)) In [53]: data[-1] Out[53]: 9999

假设有这样一个数据

In [51]: data = list(range(10**6))                                                                              

In [53]: data[-1]                                                                                               
Out[53]: 999999
实证检验

In [54]: %timeit 999999 in data                                                                                 
13.8 ms ± 256 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

In [55]: %timeit 5 in data                                                                                      
170 ns ± 55.6 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
对于9999999的100个循环,我非常困惑,但是对于5个循环,10000000个循环


这两种情况下的循环是否应该相同?

timeit
尝试为您估计循环的数量。如文件中所述:

如果未给出-n,则通过尝试计算适当数量的循环 连续10次幂,直到总时间至少为0.2秒

如果要手动定义循环数,请使用
number

import timeit    
timeit.timeit('999999 in range(10**6)', number=10000)

或者从命令行界面,在
python-m timeit[-N][statement…]中定义
N

使用
%timeit
ipython
,模块将根据脚本所用的时间限制重复次数,以便不必在不合理的时间内循环。由于数据中的
5
比数据中的
9999999花费的时间要少得多,因此对于第一种情况,它能够循环多次

您可以使用
-n
标志明确设置重复次数:

%timeit -n 5 999999 in data
16.3 ms ± 259 µs per loop (mean ± std. dev. of 7 runs, 5 loops each)
查看以下内容:

选项:-n:在循环中执行给定的语句次数。如果未提供,则确定,以获得足够的精度


因为根据时间安排,如果第一次测试运行10000000次,则需要38小时。