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使用WMI检测windows系统信息、硬盘信息、网卡信息的方法
May 15 Python
Python备份目录及目录下的全部内容的实现方法
Jun 12 Python
Python字典数据对象拆分的简单实现方法
Dec 05 Python
解决Python 中英文混输格式对齐的问题
Jul 16 Python
解决Python3 抓取微信账单信息问题
Jul 19 Python
Python发送邮件的实例代码讲解
Oct 16 Python
利用jupyter网页版本进行python函数查询方式
Apr 14 Python
基于Pyinstaller打包Python程序并压缩文件大小
May 28 Python
无需压缩软件,用python帮你操作压缩包
Aug 17 Python
PyQt5的QWebEngineView使用示例
Oct 20 Python
Python操作PostgreSql数据库的方法(基本的增删改查)
Dec 29 Python
Python万能模板案例之matplotlib绘制甘特图
Apr 13 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
浅谈电磁辐射对健康的影响
2021/03/01 无线电
用Socket发送电子邮件(利用需要验证的SMTP服务器)
2006/10/09 PHP
用PHP实现的四则运算表达式计算实现代码
2011/08/02 PHP
深入分析php之面向对象
2013/05/15 PHP
关于php支持分块与断点续传文件下载功能代码
2014/05/09 PHP
基于jquery+thickbox仿校内登录注册框
2010/06/07 Javascript
关于jQuery中的end()使用方法
2011/07/10 Javascript
javascript的创建多行字符串的7种方法
2014/04/29 Javascript
浅析JavaScript基本类型与引用类型
2014/05/28 Javascript
Jquery实现鼠标移动放大图片功能实例
2015/03/25 Javascript
基于jquery实现人物头像跟随鼠标转动
2015/08/23 Javascript
JavaScript实现的选择排序算法实例分析
2017/04/14 Javascript
浅谈vue+webpack项目调试方法步骤
2017/09/11 Javascript
vue.js移动端app之上拉加载以及下拉刷新实战
2017/09/11 Javascript
AngularJS 事件发布机制
2018/08/28 Javascript
基于Vue-cli快速搭建项目的完整步骤
2018/11/03 Javascript
详解vue 命名视图
2019/08/14 Javascript
vue.js 解决v-model让select默认选中不生效的问题
2020/07/28 Javascript
用python + openpyxl处理excel2007文档思路以及心得
2014/07/14 Python
Python常见异常分类与处理方法
2017/06/04 Python
Python正则捕获操作示例
2017/08/19 Python
python学习之matplotlib绘制散点图实例
2017/12/09 Python
今天 平安夜 Python 送你一顶圣诞帽 @微信官方
2017/12/25 Python
Python发展简史 Python来历
2019/05/14 Python
Python3.6实现根据电影名称(支持电视剧名称),获取下载链接的方法
2019/08/26 Python
Python socket聊天脚本代码实例
2020/01/02 Python
Python通过Schema实现数据验证方式
2020/11/12 Python
详解HTML5之pushstate、popstate操作history,无刷新改变当前url
2017/03/15 HTML / CSS
使用HTML和CSS实现的标签云效果(附demo)
2021/02/03 HTML / CSS
澳大利亚礼品卡商店:Gift Card Store
2019/06/24 全球购物
美工的岗位职责
2013/11/14 职场文书
云冈石窟导游词
2015/02/04 职场文书
2015年全国保险公众宣传日活动方案
2015/05/06 职场文书
单位工资证明范本
2015/06/12 职场文书
人身损害赔偿协议书
2016/03/22 职场文书
python 如何获取页面所有a标签下href的值
2021/05/06 Python