首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >%timeit测试对类似命令的可变循环数运行

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

Stack Overflow用户
提问于 2018-11-27 02:30:53
回答 2查看 654关注 0票数 3

假设这样的数据

代码语言:javascript
复制
In [51]: data = list(range(10**6))                                                                              

In [53]: data[-1]                                                                                               
Out[53]: 999999

经验检验

代码语言:javascript
复制
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个循环非常困惑。

在这两种情况下,循环应该是相同的吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-27 02:39:39

使用%timeit和ipython,该模块将根据脚本所用的时间限制重复次数,从而不必在不合理的时间内循环。因为5 in data比999999 in data花费的时间少得多,所以它能够在第一种情况下循环多次。

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

代码语言:javascript
复制
%timeit -n 5 999999 in data
16.3 ms ± 259 µs per loop (mean ± std. dev. of 7 runs, 5 loops each)

查看文档

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

票数 2
EN

Stack Overflow用户

发布于 2018-11-27 02:36:15

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

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

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

代码语言:javascript
复制
import timeit    
timeit.timeit('999999 in range(10**6)', number=10000)

或者从命令行接口,在python -m timeit [-n N] [statement ...]中定义python -m timeit [-n N] [statement ...].

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53491910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档