Python bisect模块原理及常见实例
时间:2022-07-27
本文章向大家介绍Python bisect模块原理及常见实例,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
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获取打开网站的状态码
- 【关关的刷题日记57】Leetcode 101. Symmetric Tree
- FreeBuf官网发布《简易Python Selenium爬虫实现歌曲免费下载》
- HashSet 源码分析
- Angular开发实践(五):深入解析变化监测
- 【关关的刷题日记58】Leetcode 112 Path Sum
- 学大伟业Day解题报告
- Python数据增强(data augmentation)库--Augmentor 使用介绍
- Leetcode-Easy 101. Symmetric Tree
- 数据结构-栈的定义及python实现
- 【关关的刷题日记59】Leetcode 257 Binary Tree Paths
- 学大伟业 国庆Day2
- ECMAScript 6入门 - 变量的解构赋值
- 二叉排序树 python实现
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 前端|CSS盒阴影和文字阴影
- 一文读懂Spring Boot各模块组件依赖关系
- 谈一谈|MkDocs介绍及应用
- 讲得最明白的Elasticsearch源码调试环境搭建教程
- 史上最全ThreadPoolExecutor梳理(下篇)
- JAVA|多Realm管理基础实现
- 史上最全ThreadPoolExecutor梳理(上篇)
- 使用缓存必须注意的事项
- ReentrantLock知识点梳理
- ZooKeeper常用API命令
- Python|数据可视化之公众号得分的柱状图
- Android |《看完不忘系列》之Retrofit
- 不是吧,你还在使用MyBatis Generator?试试这个工具吧
- 微信小程序|实现简单动态画布
- 乐观锁与悲观锁