龙空技术网

让Python高效做选择-二分法快速查找

外星人玩Python 447

前言:

今天我们对“python 2分查找”都比较讲究,兄弟们都需要分析一些“python 2分查找”的相关内容。那么小编在网摘上搜集了一些对于“python 2分查找””的相关知识,希望姐妹们能喜欢,小伙伴们一起来学习一下吧!

今天我们来说一下如何在Python中完成二分法查找,本文不会自己去实现一个二分法,也不会讲解高深的概念,接下来会以例子说明如何应用二分法解决问题。 如果你对二分法算法有兴趣的话可以自行搜索相关资料,网络上已经有许多资源。

本文需要使用的模块bisect例子

当前有一组学生的成绩数据,我们按以下标准给这些学生的分数打上标签

60分以下:"好好学做人吧"60到80(不含80):"勉强可以"80到90(不含90):"很不错"90分或以上:"你前途无量"传统做法重点逻辑在红框处,不想说太多,我知道你也不想听不过也要说一点,那段代码好无聊二分法

对于这种连续有序值划分区间的问题,可以用二分法完成。注意前提是有序,因为二分法是依赖于这个前提才可以保证结果正确。 二分法大致的原理是不断对序列进行对半划分,看查找值在哪一半区域。这里不展开说明。 Python中有默认模块 bisect ,这模块负责有序列表的相关功能。看看如何用他解决我们的问题

(#2) 导入模块 bisect,并命名为bs(#7) 定义分数区间,我们的问题实际是把0到100分这段用3个点划分成4个区域,4个区域就是对应我们问题的判断标准。这里我们只需要列出3个点的分数即可。(#8) 然后就是定义4个区域对应的标签内容(#23) 通过调用 bs.bisect(你的区域划分点,当前需要查找的分数)。这个方法返回的是一个对应我们定义comments序列的索引值。比分方法返回0,表示comments[0]的值比如,bs.bisect([60,80,90],70),返回结果是1,表示70这个值在第二块区域(#29) 上一步已经得到了索引值,这步只是根据索引值取回对应的内容而已。

输出结果如下:

小结当你的问题需要重复在一个连续有序段中查找时,可以考虑二分法。Python中模块 bisect可以使用二分法。bisect.bisect([60,80,90],70),返回结果是1,表示70这个值在第二块区域。

标签: #python 2分查找