Python bisect模块原理及常见实例
作者:后来者2012 发布时间:2023-01-12 07:22:15
标签: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
来源:https://www.cnblogs.com/reconova-56/p/13124630.html
0
投稿
猜你喜欢
- Python反转二维数组的行和列代码如下:import numpy as nparr=np.arange(12).reshape(4,3)p
- PyCharm2020 激活到 2100年一次激活,用到退休,就问你怕了没?超级硬核破解,从此不再找激活码,不再改HOST !!!!!Pyc
- 目的是想通过给定一个ID,取出所有的子ID,包括子ID的子ID。一开始写成FUNCTION,因为FUNCTION调用方便,但是报错:ERRO
- 1.折线图 plt.plot()常用的一些参数:颜色(color):‘c’ 青红(cyan)&
- <script language="javascript"> functio
- 本节我们再来了解下 Requests 的一些高级用法,如文件上传,代理设置,Cookies 设置等等。1. 文件上传我们知道 Reqeues
- 列表的结构在 cpython 实现的 python 虚拟机当中,下面就是 cpython 内部列表实现的源代码:typedef struct
- 各大著名厂家、公司的banner广告设计欣赏,尺寸468x60,gif格式!有acer,阿尔卡特,AMD,中国电信,爱立信,Greatwal
- Python适配器模式,代码,思考等# -*- coding: utf-8 -*-# author:baoshanclass Compute
- 前言PHP5.3之后支持了类似Java的jar包,名为phar。用来将多个PHP文件打包为一个文件。首先需要修改php.ini配置将phar
- 问题描述我在用Keras的Embedding层做nlp相关的实现时,发现了一个神奇的问题,先上代码:a = Input(shape=[15]
- 本文的爬虫教程分为四部: 1.从哪爬 where &nbs
- Python错误SyntaxError: unexpected EOF while parsing含义是解释器到底了都没找到它要找到的东西出
- selenium主要是用来做自动化测试,支持多种浏览器,爬虫中主要用来解决JavaScript渲染问题。模拟浏览器进行网页加载,当reque
- 在某些情况下,程序需要在定义函数时为一个或多个形参指定默认值,这样在调用函数时就可以省略为该形参传入参数值,而是直接使用该形参的默认值。为形
- 本文实例讲述了Python全局变量用法。分享给大家供大家参考,具体如下:全局变量不符合参数传递的精神,所以,平时我很少使用,除非定义常量。今
- 一、需求准备实现一个前后端实时发送消息的功能,即后端发送一条消息,前端就可以接收到该消息并显示在页面上。二、解决方法利用Flask-Sock
- iframe的防插与强插(一)中介绍了“市面上”能见到的两种防御被第三方网站iframe的方法,以及相应的变态突破方法。貌似把“受害人”逼上
- 接着上篇的内容,这里实现一个交易记录链,废话不多说,先看图:跟之前的逻辑类似,但也有少许不同,这里多了一个payloadhash,以及对pa
- 前言:决策树是梯度提升机和随机森林的基本构建块,在学习这些模型的工作原理和模型可解释性时,可视化决策树是一个非常有帮助。不过,当前的可视化包