这种代码(如果......对于......来......)可以既短又快

时间:2017-09-28 20:39:02

标签: python

我对以下类型的代码有一些问题:

if a == b:
    forloop:
        CODE_1
        k = t    # t will be changed in CODE_1 and CODE_2
        CODE_2
elif a == c:
    forloop:
        CODE_1
        k = t + 1
        CODE_2

正如你所看到的,两个for循环中的代码都非常相似(它们可能只是在几个字符中有一些区别。上面只是一个例子。)现在我想缩短它,因为它们几乎相同

我知道有一种方法可以缩短它:

forloop:
    CODE_1
    if a == b:
        k = t
    elif a == c:
        k = t + 1 
    CODE_2

但重点是每个循环,它需要进行比较。我认为它应该比前者慢。事实上,因为abc不会受到for循环的影响,所以不需要在每个循环中对它们进行比较。有人能告诉我如何缩短它而不会让它变慢吗?

我现在正在使用python。

很抱歉没有提供具体的代码,因为我只是对这种情况感到好奇。如果只能在某些特定代码中进行优化,那么如果你能指出它就会很棒。

复制不是解决问题的方法,因为它们仍有一些差异(不只是1个可能是25个位置)。

2 个答案:

答案 0 :(得分:1)

如果a == c,您只需在循环前调用t = t + 1,并使用相同的代码a

如果t本身在循环期间发生变化,您可以写k = t + dt,其中dt已设置为0或1,具体取决于a的值。

这应该有效,因为正如您在问题中提到的那样:

  

事实上,因为a,b和c不会受到for循环的影响

最后,也许可以使用dict而不是elif语句。

答案 1 :(得分:0)

概括另一个答案,您可以将比较和其他代码提升出循环。 说a == c真的很贵 - 也许它们是大矩阵。你可以做点什么

compare = a == c #store comparison
for ... :
    if compare:
        ...
    else: ...

您还可以从循环中拉出任何常量的操作和计算。