>>> from timeit import timeit
>>> timeit('for x in lst:pass', 'lst=[]')
0.08301091194152832
>>> timeit('if len(lst)>0:\n for x in lst:\n pass', 'lst=[]')
0.09223318099975586
当列表为空时,似乎只执行for循环会更快,这使得无论列表的状态如何,它都是更快的选项。你知道吗
但是,有一个更快的选择:
>>> timeit('if lst:\n for x in lst:\n pass', 'lst=[]')
0.03235578536987305
In [15]: if l:
....: print "hello"
....:
In [16]: l1= [1]
In [17]: if l1:
....: print "hello from l1"
....:
hello from l1
In [21]: %timeit for x in l:pass
10000000 loops, best of 3: 54.4 ns per loop
In [22]: %timeit if l:pass
10000000 loops, best of 3: 22.4 ns per loop
$ python -m timeit 'list = []' 'for x in list:' ' print x'
10000000 loops, best of 3: 0.157 usec per loop
$ python -m timeit 'list = []' 'if list:' ' for x in list:' ' print x'
10000000 loops, best of 3: 0.0766 usec per loop
基于
timeit
模块的计时:当列表为空时,似乎只执行
for
循环会更快,这使得无论列表的状态如何,它都是更快的选项。你知道吗但是,有一个更快的选择:
使用
if lst
比检查列表长度或总是执行for
循环快得多。但是,这三种方法都非常快,因此如果您试图优化代码,我建议您尝试找出真正的瓶颈所在—看看When is optimisation premature?。你知道吗你可以用
if list:
如果列表为空
if list
将计算为False
,因此无需检查len(list)
。你知道吗首先
if len(list) > 0:
应该是if list:
以提高可读性。我个人认为if
语句是多余的,但timeit
似乎证明我错了。似乎(除非我犯了一个愚蠢的错误)检查空列表会使代码更快(对于空列表):相关问题 更多 >
编程相关推荐