关于python:if-else中的条件优先级以提高效率

condition priority in if-else for efficiency

我想知道我是否有其他条件,或者是否有以下条件:

1
2
3
4
5
6
7
8
9
10
11
if conditionA:
    do A
elif conditionB:
    do B
elif conditionC:
    do C
...
...
...
else:
    do z

Q1。如果我已经知道我的条件在conditionC中解决了99%的时间,那么将该条件作为第一个条件(而不是conditionA)会使我的代码更高效吗?

Q2。同样地,如果问题1是真的,我是否应该这样对我的陈述进行优先级排序?

如果已经问过这个问题,请道歉。我可能找不到合适的词汇来搜索这个。

谢谢您。


Q.1和Q.2:是

根据python文档

An if … elif … elif … sequence is a substitute for the switch or case
statements found in other languages.

这意味着一旦代码执行了一个真正的条件,它就会退出if…elif…elif…序列。


你看到这些条件需要O(1)时间,你可以说它与你随同写的其他代码相比可以忽略不计,所以就像你随同写的代码有两个嵌套的循环O(n^2),那么这些条件与你的整体算法相比可以忽略不计。

此外,这会告诉您估计的复杂性。

但另一方面,我会说你必须把它放在条件A中,因为你在这些条件中所放的可能有它们各自的时间复杂性。

假设在python中使用in操作符进行子字符串搜索,它是这样的。

1
2
3
4
5
6
7
st = 'hello' * (2 ** 999) # hellohellohellohe...    

if 'hey' in st:
    print('hey, I found it')

else:
    print('well..')

它大约需要θ(n)和O(mn),其中m是字符串,n是要比较的子字符串。

看看这个python子字符串。

所以,总结一下,最好的方法是在条件A下。