当前位置: 首页 > news >正文

Python 的标准库 bisect 模块

Python 的标准库 bisect 模块提供了一些用于维护已排序序列的高效算法,主要基于二分查找(binary search)实现。它特别适合在需要频繁插入元素并保持序列有序的场景中使用。

下面是 bisect 模块中主要的函数方法及其功能说明:


1. bisect.bisect_left(a, x, lo=0, hi=len(a))

  • 功能​:在有序序列 a 中查找元素 x 应该插入的位置,以保持序列的有序性。如果 x 已经存在,则返回最左边的插入位置​(即第一个大于或等于 x 的位置)。
  • 参数​:
    • a:已排序的序列(通常是列表)。
    • x:要查找插入位置的元素。
    • lo:查找范围的起始索引(默认为 0)。
    • hi:查找范围的结束索引(默认为 len(a))。
  • 返回值​:插入位置的索引。

2. bisect.bisect_right(a, x, lo=0, hi=len(a))

或等价于​ bisect.bisect(a, x, lo=0, hi=len(a))

  • 功能​:在有序序列 a 中查找元素 x 应该插入的位置,以保持序列的有序性。如果 x 已经存在,则返回最右边的插入位置​(即第一个大于 x 的位置)。
  • 参数​:与 bisect_left 相同。
  • 返回值​:插入位置的索引。

注意​:bisect_right 和 bisect 是同一个函数,bisect 是 bisect_right 的别名。


3. bisect.insort_left(a, x, lo=0, hi=len(a))

  • 功能​:将元素 x 插入到有序序列 a 中,保持序列的有序性。如果 x 已经存在,则插入到最左边的位置(即第一个大于或等于 x 的位置)。
  • 参数​:与 bisect_left 相同。
  • 返回值​:无(直接修改原序列 a)。

4. bisect.insort_right(a, x, lo=0, hi=len(a))

或等价于​ bisect.insort(a, x, lo=0, hi=len(a))

  • 功能​:将元素 x 插入到有序序列 a 中,保持序列的有序性。如果 x 已经存在,则插入到最右边的位置(即第一个大于 x 的位置)。
  • 参数​:与 bisect_right 相同。
  • 返回值​:无(直接修改原序列 a)。

注意​:insort_right 和 insort 是同一个函数,insort 是 insort_right 的别名。


使用场景总结

函数用途是否插入元素相同函数别名
bisect_left查找 x 应插入的最左位置-
bisect_right / bisect查找 x 应插入的最右位置bisect
insort_left插入 x 到最左位置-
insort_right / insort插入 x 到最右位置insort

示例代码

import bisect# 已排序列表
a = [1, 3, 4, 4, 6, 8]# 查找插入位置
print(bisect.bisect_left(a, 4))  # 输出: 2(第一个 >=4 的位置)
print(bisect.bisect_right(a, 4)) # 输出: 4(第一个 >4 的位置)# 插入元素
bisect.insort_left(a, 4)
print(a)  # 输出: [1, 3, 4, 4, 4, 6, 8]bisect.insort_right(a, 4)
print(a)  # 输出: [1, 3, 4, 4, 4, 4, 6, 8]

如果你需要更高效地在动态数据中维护有序性(比如频繁插入和查找),bisect 模块是一个非常实用的工具,比每次都重新排序要高效得多。

http://www.dtcms.com/a/312500.html

相关文章:

  • 源码交易平台排行榜
  • 机器学习 决策树基本介绍
  • Mysql的MVCC是什么
  • HCIE-Datacom题库_07_设备【道题】
  • 《深入解析 Python 的 `*args` 和 `**kwargs`:从基础使用到高级应用》
  • 【数据结构】哈希表实现
  • 网关和BFF是如何演化的
  • uniapp 跨端开发
  • 基于Springboot+UniApp+Ai实现模拟面试小工具八:管理端基础功能实现
  • (论文速读)探索多模式大型语言模型的视觉缺陷
  • DeepSeek 论文夺冠,智谱开源 GLM-4.5,OpenAI 学习模式上线!| AI Weekly 7.28-8.3
  • 基于机器学习的Web应用漏洞分析与预测系统,使用django框架,三种机器学习模型
  • 深入探讨AI在测试领域的三大核心应用:自动化测试框架、智能缺陷检测和A/B测试优化,并通过代码示例、流程图和图表详细解析其实现原理和应用场景。
  • 关于Web前端安全防御之内容安全策略(CSP)
  • 知识蒸馏 - 基于KL散度的知识蒸馏 HelloWorld 示例 采用PyTorch 内置函数F.kl_div的实现方式
  • 【Linux系统】进程间通信:匿名管道
  • AI 时代的 IT 从业者:共生而非替代
  • 人声伴奏分离API:音乐智能处理的强大工具
  • Spring AI 项目实战(二十二):Spring Boot + AI +DeepSeek实现智能合同数据问答助手​(附完整源码)
  • 小白学OpenCV系列2-理解图像
  • MySQL--高可用MHA集群详解及演练
  • SelectDB数据库,新一代实时数据仓库的全面解析与应用
  • CICD--自动化部署--jinkins
  • 深度学习中的三种Embedding技术详解
  • OSPF知识点整理
  • [Oracle] 获取系统当前日期
  • ABP VNext + Quartz.NET vs Hangfire:灵活调度与任务管理
  • 35.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--数据缓存
  • Petalinux 23.2 构建过程中常见下载错误及解决方法总结
  • 【从零开始学习Redis】初识Redis