【问题标题】:why simple for loop with if condition is faster than conditional generator expression in python为什么带有if条件的简单for循环比python中的条件生成器表达式快
【发布时间】: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 个for vs 2 个for
  • 这与big-o无关
  • 除非您查看许多不同的循环大小,否则大 o 标记不适用。
  • 你为什么期待任何其他结果?即使它们是等效的代码,抽象层(当它们无法在编译时优化时)也会产生开销。 这并不意味着它们不值得使用。
  • @CharlesDuffy 因为它不必创建整个列表来循环

标签: python performance time-complexity


【解决方案1】:

第一版:对于范围内的每个元素:将其分配给i

第二版:对于范围内的每个元素:将其分配给内部i(左起第三个),评估表达式i...(i for... 中的i 分配结果到“外部”(最左边)i

if 语句在两个版本中的性能影响可能相似。

【讨论】:

  • 此外,每次迭代都必须从其迭代器中检查StopIteration。这也会使开销翻倍。
猜你喜欢
  • 2015-08-24
  • 1970-01-01
  • 2023-03-15
  • 2022-11-26
  • 1970-01-01
  • 2021-08-26
  • 2016-05-14
  • 1970-01-01
  • 2019-07-11
相关资源
最近更新 更多