假设这样的数据
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)我对999999的100个循环,5的10000000个循环非常困惑。
在这两种情况下,循环应该是相同的吗?
发布于 2018-11-27 02:39:39
使用%timeit和ipython,该模块将根据脚本所用的时间限制重复次数,从而不必在不合理的时间内循环。因为5 in data比999999 in data花费的时间少得多,所以它能够在第一种情况下循环多次。
您可以使用-n标志解释设置重复次数:
%timeit -n 5 999999 in data
16.3 ms ± 259 µs per loop (mean ± std. dev. of 7 runs, 5 loops each)查看文档
选项:-n:在循环中执行给定的语句时间。如果不提供,则确定以获得足够的精度。
发布于 2018-11-27 02:36:15
timeit试图为您估计循环的数量。如文件所述:
如果没有给出-n,则通过尝试连续的10次幂计算出合适的循环数,直到总时间至少为0.2秒为止。
如果要手动定义循环数,请使用number
import timeit
timeit.timeit('999999 in range(10**6)', number=10000)或者从命令行接口,在python -m timeit [-n N] [statement ...]中定义python -m timeit [-n N] [statement ...].
https://stackoverflow.com/questions/53491910
复制相似问题