Python标准库bisect模块的实现

 更新时间:2025年09月22日 09:48:29   作者:追逐此刻  
Python bisect模块提供高效维护有序序列的工具,基于二分查找实现,本文就来介绍一下标准库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 模块是一个非常实用的工具,比每次都重新排序要高效得多。

到此这篇关于Python标准库bisect模块的实现的文章就介绍到这了,更多相关Python bisect模块内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • pytorch自定义初始化权重的方法

    pytorch自定义初始化权重的方法

    今天小编就为大家分享一篇pytorch自定义初始化权重的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • python3-flask-3将信息写入日志的实操方法

    python3-flask-3将信息写入日志的实操方法

    在本篇文章里小编给大家整理的是关于python3-flask-3将信息写入日志的实操方法,有兴趣的朋友们学习下。
    2019-11-11
  • Python NumPy创建数组方法

    Python NumPy创建数组方法

    这篇文章主要介绍了Python NumPy创建数组方法,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-09-09
  • python list.sort()根据多个关键字排序的方法实现

    python list.sort()根据多个关键字排序的方法实现

    Python list内置sort()方法用来排序,也可以用python内置的全局sorted()方法来对可迭代的序列排序生成新的序列,本文详细的介绍了python list.sort()根据多个关键字排序,感兴趣的可以了解一下
    2021-12-12
  • python pyhs2 的安装操作

    python pyhs2 的安装操作

    这篇文章主要介绍了python pyhs2 的安装操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • Pytest执行unittest TestSuite(测试套件)的实现方法

    Pytest执行unittest TestSuite(测试套件)的实现方法

    TestSuite一直是unittest的灵活与精髓之处,在繁多的测试用例中,可以任意挑选和组合各种用例集,这篇文章主要介绍了Pytest执行unittest TestSuite(测试套件)的实现方法,需要的朋友可以参考下
    2021-08-08
  • 分布式全文检索引擎ElasticSearch原理及使用实例

    分布式全文检索引擎ElasticSearch原理及使用实例

    这篇文章主要介绍了分布式全文检索引擎ElasticSearch原理及使用实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • python读取hdfs上的parquet文件方式

    python读取hdfs上的parquet文件方式

    这篇文章主要介绍了python读取hdfs上的parquet文件方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • PyQt4 treewidget 选择改变颜色,并设置可编辑的方法

    PyQt4 treewidget 选择改变颜色,并设置可编辑的方法

    今天小编就为大家分享一篇PyQt4 treewidget 选择改变颜色,并设置可编辑的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • Python操作JSON文件的知识点整理

    Python操作JSON文件的知识点整理

    Python 提供了内置的 json 模块来处理 JSON 格式的文件。该模块主要分为读取和写入 JSON 文件。本文主要为大家整理了一些Python操作JSON文件的知识点,需要的可以参考一下
    2023-01-01

最新评论