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的Flask框架来构建一个简单的数字商品支付解决方案
Mar 31 Python
介绍Python的Django框架中的QuerySets
Apr 20 Python
python读写二进制文件的方法
May 09 Python
python函数形参用法实例分析
Aug 04 Python
Python用Pillow(PIL)进行简单的图像操作方法
Jul 07 Python
Python中最好用的命令行参数解析工具(argparse)
Aug 23 Python
树莓派安装OpenCV3完整过程的实现
Oct 10 Python
浅析PEP572: 海象运算符
Oct 15 Python
ansible动态Inventory主机清单配置遇到的坑
Jan 19 Python
python使用信号量动态更新配置文件的操作
Apr 01 Python
python 的topk算法实例
Apr 02 Python
Pycharm2020最新激活码|永久激活(附最新激活码和插件的详细教程)
Sep 29 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图片上传类带图片显示
2006/11/25 PHP
PHP 数组遍历方法大全(foreach,list,each)
2010/06/30 PHP
深入浅析安装PhpStorm并激活的步骤详解
2020/09/17 PHP
javascript 避免闭包引发的问题
2009/03/17 Javascript
关于URL中的特殊符号使用介绍
2011/11/03 Javascript
js语法学习之判断一个对象是否为数组
2014/05/13 Javascript
jquery $.trim()方法使用介绍
2014/05/21 Javascript
jQuery的animate函数学习记录
2014/08/08 Javascript
JavaScript实现常用二级省市级联下拉列表的方法
2015/03/25 Javascript
jQuery实现图像旋转动画效果
2016/05/29 Javascript
javascript回到顶部特效
2016/07/30 Javascript
浅谈js停止事件冒泡 阻止浏览器的默认行为(阻止超连接 #)
2017/02/08 Javascript
bootstrap精简教程_动力节点Java学院整理
2017/07/14 Javascript
vue router嵌套路由在history模式下刷新无法渲染页面问题的解决方法
2018/01/25 Javascript
JS文件中加载jquery.js的实例代码
2018/05/05 jQuery
vue如何将v-for中的表格导出来
2018/05/07 Javascript
vue.js 实现评价五角星组件的实例代码
2018/08/13 Javascript
Vue-cli@3.0 插件系统简析
2018/09/05 Javascript
JS实现头条新闻的经典轮播图效果示例
2019/01/30 Javascript
Python快速从注释生成文档的方法
2016/12/26 Python
Python实现的随机森林算法与简单总结
2018/01/30 Python
python global关键字的用法详解
2019/09/05 Python
Python通过Manager方式实现多个无关联进程共享数据的实现
2019/11/07 Python
使用 Supervisor 监控 Python3 进程方式
2019/12/05 Python
Scrapy框架基本命令与settings.py设置
2020/02/06 Python
python 代码实现k-means聚类分析的思路(不使用现成聚类库)
2020/06/01 Python
解决TensorFlow调用Keras库函数存在的问题
2020/07/06 Python
python基于openpyxl生成excel文件
2020/12/23 Python
美国知名日用品连锁超市:Dollar General(多来店)
2017/01/14 全球购物
通往英国高街的商店橱窗:Down Your High Street
2020/07/19 全球购物
小学生爱国演讲稿
2014/04/25 职场文书
企业理念标语
2014/06/09 职场文书
2014年自愿离婚协议书范本
2014/09/25 职场文书
乡镇党建工作总结2015
2015/05/19 职场文书
python geopandas读取、创建shapefile文件的方法
2021/06/29 Python
欧元符号 €
2022/02/17 杂记