【发布时间】:2021-10-26 12:30:11
【问题描述】:
检查列表是否包含奇数的两种类似方法:
any(x % 2 for x in a)
any(True for x in a if x % 2)
a = [0] * 10000000 的计时结果(每次尝试五次,时间以秒为单位):
0.60 0.60 0.60 0.61 0.63 any(x % 2 for x in a)
0.36 0.36 0.36 0.37 0.37 any(True for x in a if x % 2)
为什么第二种方式几乎快两倍?
我的测试代码:
from timeit import repeat
setup = 'a = [0] * 10000000'
expressions = [
'any(x % 2 for x in a)',
'any(True for x in a if x % 2)',
]
for expression in expressions:
times = sorted(repeat(expression, setup, number=1))
print(*('%.2f ' % t for t in times), expression)
【问题讨论】:
-
查看过滤方法的另一种方式是
next((True for x in a if x % 2), False),它使用显式默认值来明确过滤生成器不会产生任何错误值,即使仅a包含偶数。
标签: python performance