Python:解析数组二分查找算法bisect

简介:bisect模块提供对维护一个已排序列表而无须在每次插入后对该列表重排序的支持。对于具有大量条目需要大量比较运算的长列表,这改进了原来的线性搜索或频繁重排序。之所以被命名为 bisect 是因为它使用了基本的二分算法来完成任务。 不同于其他搜索特定值的二分算法工具,本模块的函数被设计为定位一个插入点。

加粗样式参数方法解析:

1、bisect.bisect_left(a, x, lo=0, hi=len(a), *, key=None):在 a 中找到 x 合适的插入点以维持有序。参数 lo 和 hi 可以被用于确定需要考虑的子集;默认情况下整个列表都会被使用。如果 x 已经在 a 里存在,那么插入点会在已存在元素之前(也就是左边)。如果 a 是列表(list)的话,返回值是可以被放在 list.insert() 的第一个参数的。

*2、bisect.bisect_right(a, x, lo=0, hi=len(a), , key=None)

3、bisect.bisect(a, x, lo=0, hi=len(a), *, key=None):类似于 bisect_left(),但是返回的插入点是在 a 中任何现有条目 x 之后(即其右侧)。

4、bisect.insort_left(a, x, lo=0, hi=len(a), *, key=None):按照已排序顺序将 x 插入到 a 中。此函数会先运行 bisect_left() 来定位一个插入点。 然后,它会在 a 上运行 insert() 方法在适当的位置插入 x 以保持排序顺序。

*5、bisect.insort_right(a, x, lo=0, hi=len(a), , key=None)

6、bisect.insort(a, x, lo=0, hi=len(a), *, key=None):类似于 insort_left(),但是会把 x 插入到 a 中任何现有条目 x 之后。此函数会先运行 bisect_right() 来定位一个插入点。 然后,它会在 a 上运行 insert() 方法在适当的位置插入 x 以保持排序顺序。

历史攻略:

数据结构与算法Python版:计数排序

数据结构与算法Python版:基数排序

案例源码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# time: 2024/02/03 16:58
# file: test.py
# author: tom
# 微信公众号: 玩转测试开发
import bisectdef grade(score, breakpoints=[60, 70, 80, 90], grades='FDCBA'):# 根据一组有序的数字划分点来查找考试成绩对应的字母等级: (如) 90 及以上为 'A',80 至 89 为 'B',依此类推:i = bisect.bisect(breakpoints, score)return grades[i]if __name__ == '__main__':# Case1r = [grade(score) for score in [33, 99, 77, 70, 89, 90, 100]]print(r)  # ['F', 'A', 'C', 'C', 'B', 'A', 'A']# Case2case2 = [1, 2, 3, 4, 5]bisect.bisect_left(case2, 3)  # x=3 index=2bisect.insort_left(case2, 2.5)  # insort_left >> [1, 2, 2.5, 3, 4, 5]print(case2)bisect.insort_right(case2, 3.5)  # x=3.5 右侧最近的元素是4, 其位置 index=3print(case2)  # insort_right >> [1, 2, 2.5, 3, 3.5, 4, 5]

运行结果:

图片

图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/464990.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MOCO动量编码

参考,推荐阅读 李沐论文精读系列三:MoCo、对比学习综述(MoCov1/v2/v3、SimCLR v1/v2、DINO等)_moco 对比学习-CSDN博客 背景 1. MOCO CVPR 2020 2. 对比学习:无监督学习的一种,重点学习同类实例中的共同…

【教3妹学编程-算法题】使数组异或和等于 K 的最少操作次数

3妹:2哥,新年好鸭~ 2哥 : 新年好,3妹这么早啊 3妹:是啊,新年第一天要起早,这样就可以起早一整年 2哥 :得,我还不了解你,每天晒到日上三竿 3妹:嘿嘿嘿嘿,一年是…

分享88个表单按钮JS特效,总有一款适合您

分享88个表单按钮JS特效,总有一款适合您 88个表单按钮JS特效下载链接:https://pan.baidu.com/s/1v-qcl8bv2kxZ8a98Xo9UAg?pwd8888 提取码:8888 Python采集代码下载链接:采集代码.zip - 蓝奏云 学习知识费力气,…

Python解决SSL不可用问题

参考:https://blog.csdn.net/weixin_44894162/article/details/126342591 一、问题描述: 报错概述: WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available. ## 警告:pip配…

【大厂AI课学习笔记】【1.6 人工智能基础知识】(4)深度学习和机器学习

关于深度学习和机器学习,出来包含关系之外,还有如上总结的知识点。 分别从特征处理、学习方法、数据依赖、硬件依赖等4个方面,进行了总结。 从特征处理上看:深度学习从数据中习得高级特征,并自行创建新的特征。这比普…

并发容器+并发队列【ConcurentHashMap、CopyOnWriteArrayList、阻塞队列、ArrayBlockingQueue】

并发容器 什么是并发容器?同步容器:并发容器: ConcurrentHashMap结构图JDK1.7结构图JDK1.8结构图 CopyOnWriteArrayList实现原理 并发队列阻塞队列ArrayBlockingQueue 转自极客时间 什么是并发容器? 在JUC包中,有一大部分是关于并发容器的,如Concurr…

《21天精通IPv4 to IPv6》第4天:理解IPv6子网划分规则——如何为不同的系统划分IPv6子网?

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

基于javaEE的ssm仓库管理系统

仓库管理系统的重中之重是进销存分析这一板块,在这一板块中,顾名思义能够查询到近期的进货记录,包括每日的进货单据,单品推移(即某一商品的库存变化),方便我们核对库存差异。同时也需要查询到每日的销售数据&#xff0…

深入学习Pandas:数据连接、合并、加入、添加、重构函数的全面指南【第72篇—python:数据连接】

深入学习Pandas:数据连接、合并、加入、添加、重构函数的全面指南 Pandas是Python中最强大且广泛使用的数据处理库之一,提供了丰富的函数和工具,以便更轻松地处理和分析数据。在本文中,我们将深入探讨Pandas中一系列数据连接、合…

Python常用模块

前言 在使用Python进行开发时,会经常使用到不同的模块来帮助我们完成某部分功能的实现,因此掌握一些常用模块的常用方式可以帮助我们加速程序开发。 time模块 在Python中通常有以下几种方式来表示时间: 1.时间戳(timestamp),表示的是从1970年1月1日0…

第一篇【传奇开心果微博文系列】Python微项目技术点案例示例:pillow库实现毛笔字春联

传奇开心果微博文系列 系列微博文目录Python微项目技术点案例示例系列 微博文目录一、微项目目标二、实现微项目编程思路三、初步实现目标示例代码四、添加背景色、边框、阴影效果示例代码五、添加花纹背景、装饰线条示例代码六、添加花朵、插图等示例代码 系列微博文目录 Pyt…

数据结构(2) 线性表

线性表 线性表的定义线性表的基本操作lnitList(&L)DestroyList(&L)Listlnsert(&L,i,e)ListDelete(&L,i,&e)LocateElem(L,e)GetElem(L,i)Length(L)PrintList(L)Empty(L)Tips:引用值 小结 根据数据结构的三要素–逻辑结构、数据的运算、存储结构,…