Python bisect模块原理及常见实例


Posted in Python onJune 17, 2020

1. 模块介绍

1. bisect模块为内置标准库,它实现了二分法查找算法(只要提到二分法查找,应该优先想到此模块)

2. 主要包含有两个函数:bisect函数(查找元素)和insort函数(插入元素)。

2. 常用方法介绍

场景1:已知一个有序列表,查找目标元素的位置索引

import bisect

# 已知一个有序序列
ordered_list = [23, 34, 59, 78, 99]

des_element = 21
res = bisect.bisect(ordered_list, des_element)
print(res) # res: 0

des_element = 35
res = bisect.bisect(ordered_list, des_element)
print(res) # res: 2

说明:bisect函数会默认返回右侧的位置索引,同时bisect函数是bisect_right函数的别名。

场景2:已知一个有序列表,其中列表中有重复元素,查找目标元素的位置索引

import bisect

# 已知一个有序序列
ordered_list = [23, 34, 34, 59, 78, 99]

# bisect函数默认返回右侧的位置索引
des_element = 34
res = bisect.bisect(ordered_list, des_element)
print(res) # res: 3

# bisect函数为bisect_right函数的别名
des_element = 34
res = bisect.bisect_right(ordered_list, des_element)
print(res) # res: 3

# bisect_left函数默认返回左侧的位置索引
des_element = 34
res = bisect.bisect_left(ordered_list, des_element)
print(res) # res: 1

说明:如果目标元素会在已知有序列表中多次出现,那么目标元素从已知有序列表的左侧或右侧插入时结果是不同的。

3. 场景应用

场景1:替代if-elif语句,例如:判断考生成绩所属的等级问题。

'''
  考试成绩的档位划分,共分为5个等级:
    1. F等级:[0, 60)
    2. D等级:[60, 70)
    3. C等级:[70, 80)
    4. B等级:[80, 90)
    5. A等级:[90, 100]
'''

import bisect


def get_result(score: (int, float), score_nodes: list = [60, 70, 80, 90], ranks='FDCBA') -> str:

  # 校验:分数范围
  if score < 0 or score >100:
    return "score的取值范围:0-100"

  # 边界点考虑
  if int(score) == 100:
    return "A"

  loc_index = bisect.bisect(score_nodes, score)
  return ranks[loc_index]

print(get_result(50))    # res: F
print(get_result(60))    # res: D
print(get_result(85.5))   # res: B
print(get_result(100))   # res: A

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python ORM框架SQLAlchemy学习笔记之数据查询实例
Jun 10 Python
如何使用VSCode愉快的写Python于调试配置步骤
Apr 06 Python
python  创建一个保留重复值的列表的补码
Oct 15 Python
python 函数内部修改外部变量的方法
Dec 18 Python
python 删除字符串中连续多个空格并保留一个的方法
Dec 22 Python
python读取目录下最新的文件夹方法
Dec 24 Python
python实现windows壁纸定期更换功能
Jan 21 Python
Python如何使用k-means方法将列表中相似的句子归类
Aug 08 Python
150行Python代码实现带界面的数独游戏
Apr 04 Python
Python实现王者荣耀自动刷金币的完整步骤
Jan 22 Python
python将图片转为矢量图的方法步骤
Mar 30 Python
Python Numpy库的超详细教程
Apr 06 Python
浅谈keras2 predict和fit_generator的坑
Jun 17 #Python
python能在浏览器能运行吗
Jun 17 #Python
python的pip有什么用
Jun 17 #Python
浅谈keras通过model.fit_generator训练模型(节省内存)
Jun 17 #Python
python用什么编辑器进行项目开发
Jun 17 #Python
在keras中model.fit_generator()和model.fit()的区别说明
Jun 17 #Python
python语言的优势是什么
Jun 17 #Python
You might like
php中{}大括号是什么意思
2013/12/01 PHP
php设计模式之简单工厂模式详解
2014/09/04 PHP
详解PHP的Yii框架中自带的前端资源包的使用
2016/03/31 PHP
php处理json格式数据经典案例总结
2016/05/19 PHP
jquery 图片预加载 自动等比例缩放插件
2008/12/25 Javascript
用最通俗易懂的代码帮助新手理解javascript闭包 推荐
2012/03/01 Javascript
根据json字符串生成Html的一种方式
2013/01/09 Javascript
详解JavaScript的Polymer框架中的通知交互
2015/07/29 Javascript
JavaScript中实现Map的示例代码
2015/09/09 Javascript
javascript检查某个元素在数组中的索引值
2016/03/30 Javascript
如何让一个json文件显示在表格里【实现代码】
2016/05/09 Javascript
AngularJs bootstrap搭载前台框架——js控制部分
2016/09/01 Javascript
DVA框架统一处理所有页面的loading状态
2017/08/25 Javascript
jQuery替换节点元素的操作方法
2018/03/18 jQuery
浅析Vue实例以及生命周期
2018/08/14 Javascript
详解微信小程序胶囊按钮返回|首页自定义导航栏功能
2019/06/14 Javascript
django中使用vue.js的要点总结
2019/07/07 Javascript
Vue.js如何使用Socket.IO的示例代码
2019/09/05 Javascript
element-ui 本地化使用教程详解
2019/10/28 Javascript
[08:38]DOTA2-DPC中国联赛 正赛 VG vs Elephant 选手采访
2021/03/11 DOTA
Python的Django框架可适配的各种数据库介绍
2015/07/15 Python
python线程、进程和协程详解
2016/07/19 Python
python读取二进制mnist实例详解
2017/05/31 Python
pygame实现弹力球及其变速效果
2017/07/03 Python
人脸识别经典算法一 特征脸方法(Eigenface)
2018/03/13 Python
Python3使用xml.dom.minidom和xml.etree模块儿解析xml文件封装函数的方法
2019/09/23 Python
Python彻底删除文件夹及其子文件方式
2019/12/23 Python
印尼最大的网上书店:Gramedia.com
2018/09/13 全球购物
Shell脚本如何向终端输出信息
2014/04/25 面试题
幼儿园教师奖惩制度
2014/02/01 职场文书
党性心得体会
2014/09/03 职场文书
机动车登记业务委托书
2014/10/08 职场文书
民主生活会汇报材料
2014/12/15 职场文书
浅谈Redis的几个过期策略
2021/05/27 Redis
Java集成swagger文档组件
2021/06/28 Java/Android
Mysql 8.x 创建用户以及授予权限的操作记录
2022/04/18 MySQL