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 相关文章推荐
Python3实现的判断回文链表算法示例
Mar 08 Python
通过selenium抓取某东的TT购买记录并分析趋势过程解析
Aug 15 Python
关于pytorch处理类别不平衡的问题
Dec 31 Python
TensorFlow tensor的拼接实例
Jan 19 Python
pyinstaller将含有多个py文件的python程序做成exe
Apr 29 Python
django admin管理工具自定义时间区间筛选器DateRangeFilter介绍
May 19 Python
python进行OpenCV实战之画图(直线、矩形、圆形)
Aug 27 Python
Python实现加密的RAR文件解压的方法(密码已知)
Sep 11 Python
python识别验证码的思路及解决方案
Sep 13 Python
如何在scrapy中集成selenium爬取网页的方法
Nov 18 Python
python 通过使用Yolact训练数据集
Apr 06 Python
python内置模块之上下文管理contextlib
Jun 14 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网上商城购物车设计代码分享
2012/02/15 PHP
解析PHP正则提取或替换img标记属性
2013/06/26 PHP
php强制更新图片缓存的方法
2015/02/11 PHP
详解PHP对象的串行化与反串行化
2016/01/24 PHP
jquery实现可拖拽弹出层特效
2015/01/04 Javascript
jQuery实现对无序列表的排序功能(附demo源码下载)
2016/06/25 Javascript
js接收并转化Java中的数组对象的方法
2016/08/11 Javascript
使用ReactJS实现tab页切换、菜单栏切换、手风琴切换和进度条效果
2016/10/17 Javascript
jQuery特殊符号转义的实现
2016/11/30 Javascript
jquery.tableSort.js表格排序插件使用方法详解
2020/08/12 Javascript
jQuery 表单序列化实例代码
2017/06/11 jQuery
浅谈事件冒泡、事件委托、jQuery元素节点操作、滚轮事件与函数节流
2017/07/22 jQuery
bootstrap3中container与container_fluid外层容器的区别讲解
2017/12/04 Javascript
微信小程序环境下将文件上传到OSS的方法步骤
2019/05/31 Javascript
vue 实现v-for循环回来的数据动态绑定id
2019/11/07 Javascript
[56:45]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第一局
2016/02/28 DOTA
python BeautifulSoup使用方法详解
2013/11/21 Python
Python实现简单拆分PDF文件的方法
2015/07/30 Python
Python中使用插入排序算法的简单分析与代码示例
2016/05/04 Python
python使用Tesseract库识别验证
2018/03/21 Python
详解python异步编程之asyncio(百万并发)
2018/07/07 Python
python梯度下降法的简单示例
2018/08/31 Python
Flask实现跨域请求的处理方法
2018/09/27 Python
Python3利用Dlib实现摄像头实时人脸检测和平铺显示示例
2019/02/21 Python
pyqt 实现在Widgets中显示图片和文字的方法
2019/06/13 Python
6行Python代码实现进度条效果(Progress、tqdm、alive-progress​​​​​​​和PySimpleGUI库)
2020/01/06 Python
python实现贪吃蛇游戏源码
2020/03/21 Python
Python实现自动签到脚本的示例代码
2020/08/19 Python
python和C++共享内存传输图像的示例
2020/10/27 Python
Python爬虫制作翻译程序的示例代码
2021/02/22 Python
使用Filters滤镜弥补CSS3的跨浏览器问题以及兼容低版本IE
2013/01/23 HTML / CSS
CSS3中currentColor关键字的妙用
2016/02/27 HTML / CSS
《两只鸟蛋》教学反思
2014/02/10 职场文书
写给老婆的检讨书
2014/02/21 职场文书
2015年公司新年寄语
2014/12/08 职场文书
2016年大学自主招生自荐信范文
2015/03/24 职场文书