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中的装饰器、闭包和functools的教程
Apr 02 Python
使用相同的Apache实例来运行Django和Media文件
Jul 22 Python
python 3.5实现检测路由器流量并写入txt的方法实例
Dec 17 Python
Python使用正则表达式获取网页中所需要的信息
Jan 29 Python
python在文本开头插入一行的实例
May 02 Python
python给微信好友定时推送消息的示例
Feb 20 Python
pyinstaller打包单个exe后无法执行错误的解决方法
Jun 21 Python
Python监控服务器实用工具psutil使用解析
Dec 19 Python
python实现低通滤波器代码
Feb 26 Python
如何通过python实现IOU计算代码实例
Nov 02 Python
python绘图pyecharts+pandas的使用详解
Dec 13 Python
python字典进行运算原理及实例分享
Aug 02 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/05/02 PHP
ecshop后台编辑器替换成ueditor编辑器
2015/03/03 PHP
CI框架源码解读之URI.php中_fetch_uri_string()函数用法分析
2016/05/18 PHP
RSA实现JS前端加密与PHP后端解密功能示例
2019/08/05 PHP
JS运行耗时操作的延时显示方法
2010/11/19 Javascript
NodeJS使用jQuery选择器操作DOM
2015/02/13 NodeJs
Nodejs学习笔记之测试驱动
2015/04/16 NodeJs
jQuery旋转木马式幻灯片轮播特效
2015/12/04 Javascript
jQuery实现指定区域外单击关闭指定层的方法【经典】
2016/06/22 Javascript
只需五句话搞定JavaScript作用域(经典)
2016/07/26 Javascript
详解vue-cli快速构建vue应用并实现webpack打包
2017/12/13 Javascript
Angular HMR(热模块替换)功能实现方法
2018/04/04 Javascript
JavaScript学习笔记之数组基本操作示例
2019/01/09 Javascript
浅谈layer弹出层按钮颜色修改方法
2019/09/11 Javascript
vue 关闭浏览器窗口的时候,清空localStorage的数据示例
2019/11/06 Javascript
vuex管理状态仓库使用详解
2020/07/29 Javascript
Python中模块与包有相同名字的处理方法
2017/05/05 Python
python和shell获取文本内容的方法
2018/06/05 Python
python脚本实现验证码识别
2018/06/07 Python
python实现简单飞行棋
2020/02/06 Python
Django --Xadmin 判断登录者身份实例
2020/07/03 Python
python Xpath语法的使用
2020/11/26 Python
利用CSS3伪元素实现逐渐发光的方格边框
2017/05/07 HTML / CSS
校运会广播稿100字
2014/01/27 职场文书
金融事务专业毕业生求职信
2014/02/23 职场文书
教师校本培训方案
2014/02/26 职场文书
大学生英语演讲稿
2014/04/24 职场文书
安全生产知识竞赛活动总结
2014/07/07 职场文书
群众路线教育实践活动学习笔记
2014/11/05 职场文书
2015年科协工作总结
2015/05/19 职场文书
2015年英语教学工作总结
2015/05/25 职场文书
2015年审计人员工作总结
2015/05/26 职场文书
安全教育日主题班会
2015/08/13 职场文书
2016年优秀教师先进事迹材料
2016/02/26 职场文书
5个pandas调用函数的方法让数据处理更加灵活自如
2022/04/24 Python
CentOS7 minimal 最小化安装网络设置过程
2022/12/24 Servers