我想知道以下哪一项对于元组(也对于列表或 int)执行得更快:
a_tuple = ('a', 'b',)
if (len(a_tuple) != 0): pass
if (len(a_tuple) > 0): pass
我做了一些 timeit 实验,结果非常相似(每次运行 timeit 100000 次迭代时都会有所不同)。我只是想知道是否有时间优势。
我想知道以下哪一项对于元组(也对于列表或 int)执行得更快:
a_tuple = ('a', 'b',)
if (len(a_tuple) != 0): pass
if (len(a_tuple) > 0): pass
我做了一些 timeit 实验,结果非常相似(每次运行 timeit 100000 次迭代时都会有所不同)。我只是想知道是否有时间优势。
使用not a_tuple
( True
if empty) 或tuple
( True
if not empty) 而不是测试长度:
if a_tuple:
pass
或者,作为一个示范胜于雄辩:
>>> if not ():
... print('empty!')
...
empty!
>>> if (1, 0):
... print('not empty!')
...
not empty!
除了这是一个微优化之外,空元组的虚假性测试也更快。如果对速度有疑问,请使用该timeit
模块:
>>> import timeit
>>> a_tuple = (1,0)
>>> def ft_bool():
... if a_tuple:
... pass
...
>>> def ft_len_gt():
... if len(a_tuple) > 0:
... pass
...
>>> def ft_len_ne():
... if len(a_tuple) != 0:
... pass
...
>>> timeit.timeit('ft()', 'from __main__ import ft_bool as ft')
0.17232918739318848
>>> timeit.timeit('ft()', 'from __main__ import ft_len_gt as ft')
0.2506139278411865
>>> timeit.timeit('ft()', 'from __main__ import ft_len_ne as ft')
0.23904109001159668