python中if elif语句优化_在Python中优化ifelif表达式
实现最佳性能的一种简单方法是构建一个大表,存储所有可能的(a, b)对的结果。但是,这可能会消耗大量内存,并且对于大的n来说是不实际的
下面是如何使用普通方法优化代码,如下所述。在
1。将显式and用于逻辑表达式
正如评论中所建议的那样,由于and的short circuiting行为,这更具可读性和效率。在我的测试中,仅此更改就将运行时减少60%。在
2。消除冗余条件
由于a和b的范围从1到{},如果a == n**2,那么{}永远无法实现。因此,条件a%n == 0 and a != n**2 and b == a + 1中的a != n**2检查是多余的。第三种情况也是如此。消除它们可以简化这些条件:...
elif a % n == 0 and b == a + 1:
elif (a - 1) % n == 0 and b == a - 1:
...
3。避免在条件下重复计算
注意,上述条件得到改善
a % n == 0 and b == a + 1和{}是abs(a - b) == 1的特例。{cd16>因此可以使用这些条件重写。在
^{pr2}$
还要注意,值abs(a - b)与所有条件相关。因此,可以在检查所有条件之前计算它。随着这种变化,代码变成d = abs(a - b)
if d == 0: return 6
elif d == 1:
if a % n == 0 and b > a: return 0
elif b % n == 0 and a > b: return 0
else return 1
elif d == n - 1:
if a % n == 0 and a > b: return 1
elif b % n == 0 and b > a: return 1
else return 0
elif d == n: return 1
else: return 0
4。简化逻辑
例如,上面第一个嵌套的if-else可以简化为if min(a, b) % n == 0: return 0
else return 1
更紧凑的语法是:return 1 if min(a, b) % n == 0 else 0
5。应用特定于Python的优化
在Python中,数字0被认为具有错误的值。所以对于数,if d != 0:和{}分别等价于if d:和{}。后者要快一点。应用此更改将生成以下优化代码(这里使用更紧凑的语法来缩短答案)。在d = abs(b - a)
if not d: return 6
elif d == 1: return 1 if min(a, b) % n else 0
elif d == n - 1: return 0 if max(a, b) % n else 1
else: return 1 if d == n else 0
应用上面的步骤2到5可以将运行时间再减少50%。
6。根据输入分布调整条件顺序
这种变化依赖于对应用程序中实际输入分布的了解。目标是使更常见的输入更快地返回。在这个例子中,假设输入a和{}均匀分布在[1, n**2]和{}内。在这种情况下,最常见的情况是值d与任何if条件都不匹配,0在检查完所有条件后返回。为了加速,我们可以先检查d是否可能导致非零返回值,从而使它更快地失败。在d = abs(a - b)
if 1 < d < n - 1 or d > n: return 0 # Return 0 if d is not in [0, 1, n - 1, n]
elif d == 1: return 1 if min(a, b) % n else 0
elif d == n - 1: return 0 if max(a, b) % n else 1
else: return 1 if d == n else 6 # d == 0 case is moved to the last "else" since it is least frequently seen
7。使用查找表
进一步的加速可以通过使用查找表来实现。在这里,可以存储第一个条件检查的值[0, 1, n - 1, n],以加速检查。在这种情况下,有两个主要的选项:一组或一个长度-n+1布尔值列表。前者使用较少的内存,而后者具有更好的性能。注意,查找表应该在函数外部构造一次,然后传递给它。使用布尔列表作为查找的代码如下:def func(n, a, b, lookup):
d = abs(a - b)
if not (d <= n and lookup[d]): return 0
...
应用步骤6和7(使用布尔列表查找)将运行时间再减少15%。
注意,在这个例子中,2D查找表(实现为嵌套列表或字典)也可以使用(min(a, b) % n, d)作为索引来应用。然而,在步骤6中相同的输入分布假设下,这比1D查找稍慢,因为额外一级索引的开销。在
上面的运行时是将函数应用于[1, n**2]中所有可能的(a, b)值的总时间。在
python中if elif语句优化_在Python中优化ifelif表达式相关推荐
- python中if else语句用法_讲解Python中if语句的嵌套用法
可能有这样一种情况,当你想检查其他条件后一个条件解析为真.在这种情况下,可以使用嵌套的if结构. 在嵌套的 if 语句结构,可以在一个 if... elif... else 结构里面可有另外一个 if ...
- python中for循环语句格式_关于Python中的for循环控制语句
#第一个:求 50 - 100 之间的质数 import math for i in range(50, 100 + 1): for j in range(2, int(math.sqrt(i)) + ...
- python表示复数的语句是_在python中复数如何表示
在python中复数如何表示 发布时间:2020-09-22 13:54:01 来源:亿速云 阅读:75 作者:小新 这篇文章主要介绍了在python中复数如何表示,具有一定借鉴价值,需要的朋友可以参 ...
- 下列选项中不属于python语言基本控制结构的是_下列选项中,不属于Python语言特点的是...
[简答题]这个三个按钮分别表示什么?分别用图1 是?,图2是?图3是? [判断题]金属从液态转变为固态晶体的过程称为结晶. [多选题]简化的 Fe - Fe 3 C状态图上的 S 点是共析点,该点的温 ...
- python中的elif语句怎么运行_Python的elif语句怎么用
else和elif语句也可以叫做子句,因为它们不能独立使用,两者都是出现在if.for.while语句内部的.else子句可以增加一种选择:而elif 子句则是需要检查更多条件时会被使用,与if和el ...
- python elif报错_python中的elif语句报错是什么原因
else和elif语句也可以叫做子句,因为它们不能独立使用,两者都是出现在if.for.while语句内部的.else子句可以增加一种选择:而elif子句则是需要检查更多条件时会被使用,与if和els ...
- python中的与或非_「Python基础」 While 循环语句
Python 编程中 while 语句用于循环执行程序,即在某条件下,循环执行某段程序,以处理需要重复处理的相同任务.其基本形式为: while 判断条件: 执行语句-- 执行语句可以是单个语句或语句 ...
- 关于python赋值语句下列选项中描述正确的是_关于 Python 语句 P = –P,以下选项中描述正确的是________...
[单选题]以下选项中,哪一个是Python语言中代码注释使用的符号?________ [简答题]身份认同是对自身的认知,当你对"我是谁"有个清晰的概念时,你就能对将来想要的生活有个 ...
- python try语句例题_在Python中,一个try语句只能和一个except语句搭配。_学小易找答案...
[单选题]言语和语言不同,言语是_____. [填空题]901x28= [判断题]在Python中,类中定义的类的成员(属性)或类方法,默认情况下都为公有的. [单选题]Outlines can be ...
- python常见的控制流结构有_【Python】控制流语句、函数、模块、数据结构
1.三种控制流语句:if\for\while 2.每句后都要加冒号 3.有elif语句=else后加一个if 注意使用变量名! 注意缩进! 注意控制流语句后面要加冒号! 4.for i in rang ...
最新文章
- 实用手册|史上最全的Pycharm快捷键操作
- Reflection,Regular Expression,Threading,IO,AppDomain,Web Service/Remoting Service,ORM
- the enigma x64_【一期】什么是x64、x86,它们有什么区别?
- 效率达CPU一万倍、内含800万神经元:英特尔发布神经形态芯片超算
- Linux 之八 完整嵌入式 Linux 环境、(交叉)编译工具链、CPU 体系架构、嵌入式系统构建工具
- 基础网络爬虫(Web crawler)相关技术浅析
- servlet跳转页面的几种方法
- php mysql 作业计划,关于php:我需要使用cron作业每30分钟恢复一次数据库(mysql)
- 生成式模型与判别式模型—大厂笔试汇总
- mysql 去重计算公式_mysql多字段去重,并计数
- SSM-水果商城-导入项目-学习-2
- Linux的slab和nginx的区别,nginx中slab机制理解
- U盘插入电脑说要格式化,但电脑又说“磁盘被写保护,无法格式化”,如何解决
- SIFT(Scale Invariant Feature Transform) 算法小结及实验
- 从初级晋级高级UI设计师学习路线+全套视频
- zabbix 5.0监控客户端
- [Power Query] 删除重复项
- 数学之美读书感悟01
- Web Confidential for mac(密码信息管理软件)
- IT人的学习方法论-2,讨论学习的误区
热门文章
- C++中有符号与无符号
- 远程工具jump desktop mac 破解版
- Busybox 安装
- texstudio设置外部PDF失败的原因
- c语言中null未声明,错误:此范围内未声明“NULL”(示例代码)
- 山东建筑安全员A证怎么考多选题库
- c语言中int的取值范围是怎么算出来的,C语言中int的取值范围是怎么算出来的
- 30分钟带你入门Oracle
- java map equals_Java HashMap equals()方法
- HTML5的popstate、pushState、replaceState如何玩转浏览器历史记录