前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python 二分查找库 bisect

Python 二分查找库 bisect

作者头像
为为为什么
发布2023-10-18 16:01:23
2210
发布2023-10-18 16:01:23
举报
文章被收录于专栏:又见苍岚

本文记录 python 二分查找库 bisect 用法。

bisect

  • 此模块支持按排序顺序维护列表,而不必在每次插入后对列表进行排序。对于具有昂贵比较操作的长列表项,这可能是对更常用方法的一种改进。

查找方法

bisect_left

在 a 中找到 x 的插入点以维持排序顺序。

代码语言:javascript
复制
bisect.bisect_left(a, x, lo=0, hi=len(a), *, key=None)

参数 lo 和 hi 可用于指定应该考虑的列表的子集; 默认情况下使用整个列表。如果 x 已经存在于 a 中,则插入点将位于任何现有条目之前(左侧)。假设 a 已经排序,返回值适合作为 list.insert() 的第一个参数使用。

**bisect **/ bisect_right
代码语言:javascript
复制
bisect.bisect_right(a, x, lo=0, hi=len(a), *, key=None)

类似用法,在右侧。

插入方法

insort_left
代码语言:javascript
复制
bisect.insort_right(a, x, lo=0, hi=len(a), *, key=None)

按排序顺序将 x 插入 a 中。

该函数首先运行 bisect_left() 来定位插入点。接下来,它在 a 上运行 insert ()方法,在适当的位置插入 x 以维护排序顺序。

insort /insort_right
代码语言:javascript
复制
bisect.insort_right(a, x, lo=0, hi=len(a), *, key=None)

该函数首先运行 bisect_right() 来定位插入点。接下来,它在 a 上运行 insert() 方法,在适当的位置插入 x 以维护排序顺序。

性能

搜索性能为 O(log(n)), 插入为 O(n),这是由于插入操作本身的操作复杂度决定的。

示例

查找
代码语言:javascript
复制
import bisect
a = [[1, 'asdf'], [2, 'asdf'], [4, 'asdf'], [6, 'asdf'], [8, 'asdf'], [45, 'asdf'], [67, 'asdf'], [7, 'asdf']]

bisect.bisect_right(a, 7, key=lambda x:x[0])

-->
4

插入
代码语言:javascript
复制
import bisect

a = [[1, 'asdf'], [2, 'asdf'], [4, 'asdf'], [6, 'asdf'], [8, 'asdf'], [45, 'asdf'], [67, 'asdf'], [7, 'asdf']]
bisect.insort_left(a, [6, '###'], key=lambda x:x[0])

-->
[[1, 'asdf'], [2, 'asdf'], [4, 'asdf'], [6, '###'], [6, 'asdf'], [8, 'asdf'], [45, 'asdf'], [67, 'asdf'], [7, 'asdf']]

参考资料

文章链接: https://cloud.tencent.com/developer/article/2345862

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-8-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • bisect
  • 查找方法
    • bisect_left
      • **bisect **/ bisect_right
      • 插入方法
        • insort_left
          • insort /insort_right
          • 性能
          • 示例
            • 查找
              • 插入
              • 参考资料
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档