python - 判断奇偶数,==和!=哪个效率更高

python 专栏收录该内容
110 篇文章 1 订阅

Python 大小等于比较效率

这是新的结论,总之==在Python中,总是最后被处理的!

a=int(input("输入一个整数:"))
odevity=str(a)+"是奇数"
if a%2==0:odevity=str(a)+"是偶数"
print(odevity)

上面是教材上的思路

#运行效率
import time
a=6
ss=time.time()
for i in range(1000000):
    ode=str(a)+"是奇数"
    if a%2==0:ode=str(a)+"是偶数"
    print(ode)
t1=time.time()-ss

ss=time.time()
for i in range(1000000):
    if a%2==0:print(str(a)+"是偶数")
    else:print(str(a)+"是奇数")
print(t1,time.time()-ss,sep="\n")

这里是我验证常规思路的效率
当教材的思路先给判断结果定义为一个变量并先赋值一个结果,再用if去判断另外一种结果,如果if成功则修改变量内容,最后是输出变量。
常规思路:
if,如果成功,则直接输出对应结果。如果失败,else另一种结果。其间不定义额外变量,直接输出。
教材的内容乍看高大上,经过验证,当输入数值是奇数时,教材思路运算节省时间,但如果输入数值结果是偶数时,常规思路快。
但这里常规的第一条正好是偶数,那颠倒过来再试试。
两次运算结果,仍是常规思路快。
原因是否在定义了变量并两次赋值上。
按照概率学,

常规思路a%2!=0
输入值是6
6.606092929840088
6.018859386444092
输入值是5
6.128280162811279
5.943890333175659
在教材第一次赋值等同于常规思路的if时,常规思路一直比教材的快。
常规思路a%2==0
输入值是5
6.246928453445435
6.241985559463501

6.013113498687744
5.886185169219971

输入值是6
6.429988622665405
5.974666118621826

遗憾教材思路并没有速度优势。

昨天我看到一片经典文章。写了这样的代码就被老板开除的那个,里面的一个if(xx1==true&&xx2!=true),这个把我绕住了,别的都能看懂,最后搜索别的地方看懂了。于是我有了一丝丝的担忧,亏的我现在自学编程不是为了给别人打工。

但看到教材高大上的判断方式后,我还是忍不住尝试我的自然语言的思维。
这次并非自然语言的胜利,而是教材思维赋值的失败。
是否有大佬分析过语法、算法、变量的细节方面的效率优先级?

import time

time.sleep(3)
a = 10
ss = time.time()
for i in range(10000000):
    if a == 10: ""
print(time.time() - ss)

ss = time.time()
for i in range(10000000):
    if a != 10: ""
print(time.time() - ss)

我发现一个问题,就是cpu流程优化的问题,于是我现在把代码中的运算再复制一段,有点奇怪,每次第三组的次序与别的组相反,那我有错位,注释掉第一个运算。

经过一番对比,!=的运算效率比==高点

我又看了一下教材,我之前只是找着思路码的,并没注意这个细节,教材上用的是!=,那我用!=再判断一次奇偶数。

#运行效率
import time
a=6
ss=time.time()
for i in range(1000000):
    ode=str(a)+"是偶数"
    if a%2!=0:ode=str(a)+"是奇数"
    print(ode)
t1=time.time()-ss

ss=time.time()
for i in range(1000000):
    if a%2!=0:print(str(a)+"是奇数")
    else:print(str(a)+"是偶数")
t2=time.time()-ss

ss=time.time()
for i in range(1000000):
    ode=str(a)+"是偶数"
    if a%2!=0:ode=str(a)+"是奇数"
    print(ode)
t3=time.time()-ss

ss=time.time()
for i in range(1000000):
    if a%2!=0:print(str(a)+"是奇数")
    else:print(str(a)+"是偶数")
t4=time.time()-ss

print(t1,t2,t3,t4,sep="\n")

a=6
5.995797872543335
5.967499017715454
5.999722242355347
5.997941017150879

a=5
6.284368515014648
5.9603111743927
6.601690053939819
6.005819797515869

依然是自然语言的胜利,欧耶!
只能说,编书者不够较真或者太爱耍酷!
或者只注重了算法的效率,而忽略了机制的效率。
我对自然语言更自信了!

注意下,我把最后一句print改过,print(t1,t2,t3,time.time()-ss,sep="\n")这是之前,我怕会影响最后一个的时间准确性,单独拿出来写了。

虽然那个被老板开除的,算是个段子吧!不过那个休眠一天的和耍猴的不能忍,那个潜在bug没细看,其他的还是可以接受的。

N年前,老师也是讲,现在计算机性能提升,不在乎这么点效率。

  • 0
    点赞
  • 3
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值