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实现将html表格转换成CSV文件的方法
Jun 28 Python
Python引用模块和查找模块路径
Mar 17 Python
Python方法的延迟加载的示例代码
Dec 18 Python
python版微信跳一跳游戏辅助
Jan 11 Python
python合并同类型excel表格的方法
Apr 01 Python
浅谈python日志的配置文件路径问题
Apr 28 Python
nohup后台启动Python脚本,log不刷新的解决方法
Jan 14 Python
Python小白必备的8个最常用的内置函数(推荐)
Apr 03 Python
Python 日期区间处理 (本周本月上周上月...)
Aug 08 Python
python读取Kafka实例
Dec 23 Python
PyTorch中的C++扩展实现
Apr 02 Python
python中os.path.join()函数实例用法
May 26 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
双料怀旧--SHARP GF515的维护、修理和简单调试
2021/03/02 无线电
2款PHP无限级分类实例代码
2015/11/11 PHP
PHP版微信小店接口开发实例
2016/11/12 PHP
Laravel中使用Queue的最基本操作教程
2017/12/27 PHP
XmlUtils JS操作XML工具类
2009/10/01 Javascript
javaScript中slice函数用法实例分析
2015/06/08 Javascript
JS实现日期时间动态显示的方法
2015/12/07 Javascript
jQuery动态添加及删除表单上传元素的方法(附demo源码下载)
2016/01/15 Javascript
jQuery Ajax 异步加载显示等待效果代码分享
2016/08/01 Javascript
jQuery 获取页面li数组并删除不在数组中的key
2016/08/02 Javascript
canvas知识总结
2017/01/25 Javascript
Java中int与integer的区别(基本数据类型与引用数据类型)
2017/02/19 Javascript
swiper 自动图片无限轮播实现代码
2018/05/21 Javascript
详解使用 Node.js 开发简单的脚手架工具
2018/06/08 Javascript
详解Vue项目部署遇到的问题及解决方案
2019/01/11 Javascript
Node爬取大批量文件的方法示例
2019/06/28 Javascript
微信小程序 textarea 层级过高问题简单解决方案
2019/10/14 Javascript
浅谈vue 锚点指令v-anchor的使用
2019/11/13 Javascript
Vue两个版本的区别和使用方法(更深层次了解)
2020/02/16 Javascript
微信小程序实现下滑到底部自动翻页功能
2020/03/07 Javascript
JavaScript代码压缩工具UglifyJS和Google Closure Compiler的基本用法
2020/04/13 Javascript
django 多数据库配置教程
2018/05/30 Python
python实现微信机器人: 登录微信、消息接收、自动回复功能
2019/04/29 Python
django获取from表单multiple-select的value和id的方法
2019/07/19 Python
python二元表达式用法
2019/12/04 Python
使用Python-OpenCV消除图像中孤立的小区域操作
2020/07/05 Python
TensorFlow2.0使用keras训练模型的实现
2021/02/20 Python
html5绘制时钟动画
2014/12/15 HTML / CSS
Tenstickers法国:墙贴和装饰贴纸
2019/08/26 全球购物
小学生自我评价范文
2014/01/25 职场文书
公司门卫的岗位职责
2014/02/19 职场文书
小学模范班主任事迹材料
2014/05/13 职场文书
小学教师岗位职责
2015/04/02 职场文书
送给自己的励志语句:要安静的优秀,悄无声息的坚强
2019/11/26 职场文书
理解python中装饰器的作用
2021/07/21 Python
Win10服务主机占用内存怎么办?Win10服务主机进程占用大量内存解决方法
2022/09/23 数码科技