【问题标题】:Which is more efficient? A nested if in a for loop or a separate if with a separate for loop?哪个更有效率?嵌套 if 在 for 循环或单独的 if 与单独的 for 循环?
【发布时间】:2014-07-11 14:02:20
【问题描述】:

所以我正在尝试确定其中哪一个更有效,或者它们之间是否存在差异。我正在编写的程序遍历一个 for 循环(python)并做一些事情,然后,根据一个标志,将写入一个文件。

示例 A:

for element in list:
    Do stuff
    if(write_to_file):
       write to file

与示例 B:

for element in list:
    Do stuff
if(write_to_file):
    for element in list:
        write to file

在 A 的情况下,它必须每次检查是否为真,但在 B 的情况下,如果为真,则必须重新执行 for 循环。我的想法是他们是平等的,但我想听听更有经验的程序员的意见

【问题讨论】:

  • 您正在写入文件,因此,您担心与 I/O 所需的时间相比,某些东西会落入虚无之中。 :-)
  • testing it yourself 无可替代。
  • @IanAuld,Henry Keiter:谢谢,我不知道这个函数存在。会做
  • 如果您还没有,请查看 ipython...

标签: python performance loops


【解决方案1】:

基于您的示例的Big O 复杂性分析:

for element in list:
    Do stuff
if(write_to_file):
    for element in list:
        write to file

上面的效率较低,因为您要迭代 list 两次。

即:O(n) x 2

但请测试自己,使用timeit 模块,最重要的是,您过早地担心优化问题。 先让它工作!

另请阅读:When to optimize

【讨论】:

  • 如果write_to_file 为假,这更有效,因为只有一个循环迭代并且条件只检查一次,而不是比每次循环。
  • True 除外。是的,这一切都取决于。 OP没有提供任何细节,所以这是我可以根据我所见提供的最佳答案:)
  • @JamesMills,它基于用户输入,完全随机。根据您的输入和 OP 上的 cmets 中的输入,我尝试在其上使用 timeit:示例 A:Write_to_file = false:18.05 ms write_to_file = true:18.60 ms Ex B:写入文件 = true:19.4 ms Writeto file = false : 18.27 ms 差别不大。别担心,在我问之前它就可以工作了!
  • @musher:用户输入绝不是完全随机的!
  • @BenjaminHodgson 我其实很好奇——你是什么意思?
【解决方案2】:

示例 C:

if(write_to_file):
    for element in list:
        Do stuff
        write to file
else:
    for element in list:
        Do stuff

正如其他人所说,您可能不会注意到这些方法之间的区别。

【讨论】:

    猜你喜欢
    • 2020-12-11
    • 1970-01-01
    • 2012-08-15
    • 1970-01-01
    • 2015-07-20
    • 2019-06-27
    • 2018-07-08
    • 2021-04-13
    • 1970-01-01
    相关资源
    最近更新 更多