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 相关文章推荐
Django框架中处理URLconf中特定的URL的方法
Jul 20 Python
编写自定义的Django模板加载器的简单示例
Jul 21 Python
python字典DICT类型合并详解
Aug 17 Python
使用Django连接Mysql数据库步骤
Jan 15 Python
python3.5安装python3-tk详解
Apr 26 Python
python正则表达式匹配不包含某几个字符的字符串方法
Jul 23 Python
django 通过URL访问上传的文件方法
Jul 28 Python
调整Jupyter notebook的启动目录操作
Apr 10 Python
python 窃取摄像头照片的实现示例
Jan 08 Python
python 爬取哔哩哔哩up主信息和投稿视频
Jun 07 Python
浅析Django接口版本控制
Jun 26 Python
C3 线性化算法与 MRO之Python中的多继承
Oct 05 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 foreach、while性能比较
2009/10/15 PHP
PHP 设置MySQL连接字符集的方法
2011/01/02 PHP
深入mysql_fetch_row()与mysql_fetch_array()的区别详解
2013/06/05 PHP
php实现在新浪云中使用imagick生成缩略图并上传的方法
2016/09/26 PHP
Ubuntu VPS中wordpress网站打开时提示”建立数据库连接错误”的解决办法
2016/11/03 PHP
javascript 解析后的xml对象的读取方法细解
2009/07/25 Javascript
js 分栏效果实现代码
2009/08/29 Javascript
如何设置iframe高度自适应在跨域情况下的可用方法
2013/09/06 Javascript
jQuery中animate动画第二次点击事件没反应
2015/05/07 Javascript
$.extend 的一个小问题
2015/06/18 Javascript
JS实现弹性菜单效果代码
2015/09/07 Javascript
jquery.Jcrop结合JAVA后台实现图片裁剪上传实例
2016/11/05 Javascript
详解Node.js:events事件模块
2016/11/24 Javascript
基于hover的用法实例(推荐)
2017/07/04 Javascript
浅谈如何通过node.js对数据进行MD5加密
2018/05/16 Javascript
js中位运算的运用实例分析
2018/12/11 Javascript
es6数值的扩展方法
2019/03/11 Javascript
从零到一详聊创建Vue工程及遇到的常见问题
2019/04/25 Javascript
vue+element使用动态加载路由方式实现三级菜单页面显示的操作
2020/08/04 Javascript
python网络编程实例简析
2014/09/26 Python
Django利用cookie保存用户登录信息的简单实现方法
2019/05/27 Python
Python3简单爬虫抓取网页图片代码实例
2019/08/26 Python
学习Django知识点分享
2019/09/11 Python
PyCharm导入python项目并配置虚拟环境的教程详解
2019/10/13 Python
python3连接MySQL8.0的两种方式
2020/02/17 Python
Python实现一个简单的递归下降分析器
2020/08/01 Python
什么是用户模式(User Mode)与内核模式(Kernel Mode) ?
2014/07/21 面试题
主管职责范文
2013/11/09 职场文书
爱我中华演讲稿
2014/05/20 职场文书
村道德模范事迹材料
2014/08/28 职场文书
小区保洁员岗位职责
2015/04/10 职场文书
2015年留守儿童工作总结
2015/05/22 职场文书
《风筝》教学反思
2016/02/23 职场文书
python如何正确使用yield
2021/05/21 Python
Pycharm连接远程服务器并远程调试的全过程
2021/06/24 Python
前端JS获取URL参数的4种方法总结
2022/04/05 Javascript