Python timeit 不适用于 list.remove 操作

2023-12-02

我试图通过 timeit 模块检查 python 列表中删除操作的性能,但它抛出了 ValueError。

In [4]: a = [1, 2, 3]

In [5]: timeit a.remove(2)

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-5-7b32a87ebb7a> in <module>()
----> 1 get_ipython().magic('timeit a.remove(2)')

/home/amit/anaconda3/lib/python3.4/site-packages/IPython/core/interactiveshell.py in magic(self, arg_s)
   2334         magic_name, _, magic_arg_s = arg_s.partition(' ')
   2335         magic_name = magic_name.lstrip(prefilter.ESC_MAGIC)
-> 2336         return self.run_line_magic(magic_name, magic_arg_s)
   2337 
   2338     #-------------------------------------------------------------------------

..
..
..
..

ValueError: list.remove(x): x not in list

您每次都需要创建列表,因为您在第一个循环后删除了 2:

In [2]: %%timeit
   ...: a = [1,2,3]
   ...: a.remove(2)
   ...: 

10000000 loops, best of 3: 159 ns per loop

你可以看到有10000000循环,因此通过在您删除的运行时间之外创建列表2第一个循环,因此在后续运行中没有 2 要删除。

您可以计算列表创建的时间并减去该时间,以获得删除所需时间的近似值。

In [3]: timeit a =  [1,2,3]
10000000 loops, best of 3: 89.8 ns per loop

您可以运行一次,但您的计时不会那么准确:

In [12]: a = [1,2,3]

In [13]: timeit -n 1 -r 1 a.remove(2)
1 loops, best of 1: 4.05 µs per loop

timeit magic 命令的选项位于docs:

Options:

-n<N>:执行给定的语句<N>循环多次。如果未给出该值,则选择一个拟合值。

-r<R>:重复循环迭代<R>次并取得最佳结果。默认值:3

-t:使用time.time来测量时间,这是Unix上的默认值。此功能测量挂机时间。

-c:使用 time.clock 来测量时间,这是 Windows 上的默认值,用于测量挂机时间。在 Unix 上,使用 resource.getrusage 来代替并返回 CPU 用户时间。

-p<P>:使用精度<P>显示计时结果的数字。默认值:3

-q:安静,不打印结果。

-o:返回一个 TimeitResult ,可以存储在变量中进行检查 结果更详细。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python timeit 不适用于 list.remove 操作 的相关文章

随机推荐