python if语句的相关问题

类p有a,b,c三个变量

这一段:

if p1.a>p2.a:
    do
elif p1.a==p2.a:
    do

是进行了一次比较还是两次比较?

这样呢?

if p1.a>p2.a:
    do
elif (p1.a==p2.a and p1.b>p2.b):
    do

是几次比较?

两段比较程序
第一段

 if p1.a>p2.a:
    do
elif  (p1.a==p2.a and p1.b>p2.b):
    do
elif  (p1.a==p2.a and p1.b==p2.b and p1.c>p2.c):
    do

第二段

if p1.a<p2.a:
    pass
elif p1.a>p2.a:
    do
else:
    if p1.b<p2.b:
        pass
    elif p1.b>p2.b:
        do
    else:
        if p1.c>p2.c:
            do

第二段的运行效率会高一些吗?

求更好的解决方法。

4个回答

怎么贴格式文本?这是前面的那个表格
表格

第一段的比较次数更少吧。分支判断比第二段少

  1. 如果 > 符合,只比较1次。否则比较第2次。
  2. 如果 > 符合,只比较1次。否则: 如果等号不成立,第3次不比较(短路)——2次;再否则是3次。
  3. 列表对比,差别不大。 a b 次数 p1?p2 p1?p2 一 二 < < 3 1 < = 3 1 < > 3 1 = < 5 3 = = 6 5 = > 3 4 > < 1 2 > = 1 2 > > 1 2 合计 26 21 又:比较大小还是很简单的,不必纠结。影响效率的是 do 的复杂度啊。

个人觉得还是第二种高,可以预先比较好,然后直接if比较结果就行。这样不用每次再进行一次比较运算。但是具体到第一种,还是要进行AND运算,而第二种则不必。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐