【发布时间】:2017-09-14 01:37:28
【问题描述】:
为什么在第一种情况下使用 if 条件的 for 循环比使用条件生成器表达式的第二种情况快 2 倍以上?
%%timeit
for i in range(100000):
if i < 10000:
continue
pass
以 100 个循环为时钟,最好是 3 个:每个循环 2.85 毫秒,同时使用生成器表达式:
%%timeit
for i in (i for i in range(100000) if i >= 10000):
pass
100 次循环,3 次中的最佳:每个循环 6.03 毫秒
【问题讨论】:
-
我猜是因为您对第二个版本中的值进行了两次检查。 (1 个
forvs 2 个for) -
这与
big-o无关。 -
除非您查看许多不同的循环大小,否则大 o 标记不适用。
-
你为什么期待任何其他结果?即使它们是等效的代码,抽象层(当它们无法在编译时优化时)也会产生开销。 这并不意味着它们不值得使用。
-
@CharlesDuffy 因为它不必创建整个列表来循环
标签: python performance time-complexity