返回顶部
首页 > 资讯 > 后端开发 > Python >Python二分查找之bisect库如何使用
  • 790
分享到

Python二分查找之bisect库如何使用

2023-07-05 11:07:52 790人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

本篇内容主要讲解“python二分查找之bisect库如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python二分查找之bisect库如何使用”吧!简介bisect 库是 Python

本篇内容主要讲解“python二分查找之bisect库如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习Python二分查找之bisect库如何使用”吧!

    简介

    bisect 库是 Python 标准库中的一部分,它提供了二分查找的功能。二分查找是一种在有序列表中查找某一特定元素的搜索算法。它的时间复杂度为 O ( log ⁡ n ) O(\log n) O(logn),比顺序查找的时间复杂度 O ( n ) O(n) O(n) 要有效率。

    bisect 库的使用

    bisect 库提供了 bisect_leftbisect_rightinsort_leftinsort_right四个函数,用于在有序列表中查找或插入元素。

    bisect_left

    bisect_left 函数用于在有序列表中二分查找某一位置,使得在该位置插入指定元素后仍保持有序,返回该位置,如果元素已经存在,则返回它的左边位置。

    函数原型如下:

    bisect.bisect_left(a, x, lo=0, hi=len(a), *, key=None)

    其中,a 是一个有序列表,x 是要查找的元素,lohi 是查找范围的左右边界,key 是一个函数,用于从列表中提取比较的键值。

    示例:

    # 导入 bisect 库import bisect# 有序列表a = [1, 2, 3, 3, 5, 6, 6, 6, 8, 10]# 查找元素 4 的位置print(bisect.bisect_left(a, 4))  # 4# 查找元素 6 的位置print(bisect.bisect_left(a, 6))  # 5

    bisect_right

    bisect_right 函数用于在有序列表中二分查找某一位置,使得在该位置插入指定元素后仍保持有序,返回该位置,如果元素已经存在,则返回它的右边位置。

    函数原型如下:

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

    其中,a 是一个有序列表,x 是要查找的元素,lohi 是查找范围的左右边界,key 是一个函数,用于从列表中提取比较的键值。

    示例:

    # 导入 bisect 库import bisect# 有序列表a = [1, 2, 3, 3, 5, 6, 6, 6, 8, 10]# 查找元素 4 的位置print(bisect.bisect_right(a, 4))  # 4# 查找元素 6 的位置print(bisect.bisect_right(a, 6))  # 8

    除此之外,bisect_right 还可以简写为 bisect

    # 导入 bisect 库import bisect# 有序列表a = [1, 2, 3, 3, 5, 6, 6, 6, 8, 10]# 查找元素 4 的位置print(bisect.bisect(a, 4))  # 4# 查找元素 6 的位置print(bisect.bisect(a, 6))  # 8

    insort_left

    insort_left 函数用于在有序列表中二分查找某一位置,使得在该位置插入指定元素后仍保持有序,然后将元素插入该位置,如果元素已经存在,则插入到它的左边位置。

    函数原型如下:

    bisect.insort_left(a, x, lo=0, hi=len(a), *, key=None)

    其中,a 是一个有序列表,x 是要插入的元素,lohi 是查找范围的左右边界,key 是一个函数,用于从列表中提取比较的键值。

    示例:

    # 导入 bisect 库import bisect# 有序列表a = [1, 2, 3, 3, 5, 6, 6, 6, 8, 10]# 插入元素 4bisect.insort_left(a, 4)print(a)  # [1, 2, 3, 3, 4, 5, 6, 6, 6, 8, 10]# 插入元素 6bisect.insort_left(a, 6)print(a)  # [1, 2, 3, 3, 4, 5, 6, 6, 6, 6, 8, 10]

    insort_right

    insort_right 函数用于在有序列表中二分查找某一位置,使得在该位置插入指定元素后仍保持有序,然后将元素插入该位置,如果元素已经存在,则插入到它的右边位置。

    函数原型如下:

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

    其中,a 是一个有序列表,x 是要插入的元素,lohi 是查找范围的左右边界,key 是一个函数,用于从列表中提取比较的键值。

    示例:

    # 导入 bisect 库import bisect# 有序列表a = [1, 2, 3, 3, 5, 6, 6, 6, 8, 10]# 插入元素 4bisect.insort_right(a, 4)print(a)  # [1, 2, 3, 3, 4, 5, 6, 6, 6, 8, 10]# 插入元素 6bisect.insort_right(a, 6)print(a)  # [1, 2, 3, 3, 4, 5, 6, 6, 6, 6, 8, 10]

    除此之外,insort_right 还可以简写为 insort

    # 导入 bisect 库import bisect# 有序列表a = [1, 2, 3, 3, 5, 6, 6, 6, 8, 10]# 插入元素 4bisect.insort(a, 4)print(a)  # [1, 2, 3, 3, 4, 5, 6, 6, 6, 8, 10]# 插入元素 6bisect.insort(a, 6)print(a)  # [1, 2, 3, 3, 4, 5, 6, 6, 6, 6, 8, 10]

    insort 函数的实质是调用 bisect 函数获取插入位置,然后调用 list.insert 函数将元素插入到该位置。

    二分查找基础实现

    在 Python 中,我们可以使用 bisect 库来实现二分查找,但其只能根据元素的值和元素之间的比较关系来查找元素的位置,如果要根据元素的其他属性或其他关系来查找元素的位置,就需要自己实现二分查找了。

    二分查找的基本模板如下:

    def binary_search(nums, target):    left, right = 0, len(nums) - 1    while left <= right:        mid = (left + right) // 2        if nums[mid] == target:            return mid        elif nums[mid] < target:            left = mid + 1        else:            right = mid - 1    return -1

    通过修改模板,我们可以根据更复杂的关系来查找元素。

    示例:

    852. 山脉数组的峰顶索引
    符合下列属性的数组 arr 称为 山脉数组

    • arr.length >= 3

    • 存在 i0 < i < arr.length - 1)使得:

      • arr[0] < arr[1] < ... arr[i-1] < arr[i]

      • arr[i] > arr[i+1] > ... > arr[arr.length - 1]

    给你由整数组成的山脉数组 arr ,返回任何满足 arr[0] < arr[1] < ... arr[i - 1] < arr[i] > arr[i + 1] > ... > arr[arr.length - 1] 的下标 i

    class Solution:    def peakIndexInMountainArray(self, arr: List[int]) -> int:        n = len(arr)        left, right, ans = 1, n - 2, 0        while left <= right:            mid = (left + right) // 2            if arr[mid] > arr[mid + 1]:                ans = mid                right = mid - 1            else:                left = mid + 1        return ans

    到此,相信大家对“Python二分查找之bisect库如何使用”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

    --结束END--

    本文标题: Python二分查找之bisect库如何使用

    本文链接: https://lsjlt.com/news/351394.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • Python二分查找之bisect库如何使用
      本篇内容主要讲解“Python二分查找之bisect库如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python二分查找之bisect库如何使用”吧!简介bisect 库是 Python...
      99+
      2023-07-05
    • Python 二分查找之bisect库的使用详解
      目录简介bisect 库的使用bisect_leftbisect_rightinsort_leftinsort_right二分查找基础实现简介 bisect 库是 Python 标准...
      99+
      2023-03-11
      Python bisect库使用 Python bisect
    • Python实现二分查找与bisect模块详解
      前言 其实Python 的列表(list)内部实现是一个数组,也就是一个线性表。在列表中查找元素可以使用 list.index() 方法,其时间复杂度为O(n) 。对于大数据量,则可以用二分查找进行优化。 ...
      99+
      2022-06-04
      详解 模块 Python
    • python中的bisect模块与二分查找详情
      目录1.bisect模块概述2.bisect模块的函数详解2.1 bisect.bisect*()方法2.2 bisect.insort*()方法3.python中的二分查找3.1 ...
      99+
      2024-04-02
    • Python3二分查找库函数bisect(),bisect_left()和bisect_right()的区别
      目录case 1case 2case 3前提:列表有序!!! bisect()和bisect_right()等同,那下面就介绍bisect_left()和bise...
      99+
      2023-03-11
      Python3二分查找库函数bisect() bisect_left()和bisec_right()区别
    • 如何使用二分法查找
      本篇内容介绍了“如何使用二分法查找”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 1、二分法查找...
      99+
      2024-04-02
    • 如何使用Java二分查找
      这篇文章主要介绍“如何使用Java二分查找”,在日常操作中,相信很多人在如何使用Java二分查找问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用Java二分查找”的疑惑有所帮助!接下来,请跟着小编一起来...
      99+
      2023-06-15
    • Python3二分查找库函数bisect(),bisect_left()和bisect_right()的区别是什么
      这篇文章主要介绍“Python3二分查找库函数bisect(),bisect_left()和bisect_right()的区别是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“...
      99+
      2023-07-05
    • 如何使用Python语言实现二分法查找
      这篇文章主要为大家展示了“如何使用Python语言实现二分法查找”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用Python语言实现二分法查找”这篇文章吧。前言:二分法也就是二分查找,它是...
      99+
      2023-06-29
    • python二分法查找怎么使用
      这篇文章主要讲解了“python二分法查找怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python二分法查找怎么使用”吧!对于要搜索的元素越多,二分查找速度比简单查找快的更多 这是...
      99+
      2023-06-25
    • 如何使用PHP实现顺序查找和二分查找算法
      这篇文章主要介绍了如何使用PHP实现顺序查找和二分查找算法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。使用PHP描述顺序查找和二分查找(也...
      99+
      2024-04-02
    • Python详细解析之二分查找算法
      本篇文章给大家带来了关于python的相关知识,其中主要整理了二分查找算法的相关问题,包括了算法描述、算法分析、算法思路等等内容,下面一起来看一下,希望对大家有帮助。二分法是一种效率比较高的搜索方法回忆之前做过的猜数字的小游戏,预先给定一个...
      99+
      2022-06-28
      python
    • 使用Python实现二分法查找的示例
      关于二分法的定义我就不说了,CSDN很多大牛和前辈都已经阐述的很清楚了,直接上代码。 首先,先创建一个名称为 binary_search 的函数:传递两个参数,元素列表和要查找的值。...
      99+
      2023-05-17
      Python 二分法 Python二分查找
    • Python真题案例之二分法查找详解
      目录写在前面的话问题描述原理分析1.实现步骤2.图解参考代码写在前面的话 学了Python一些基础知识之后,相信大家对Python使用方法有了一定的感悟,想要追求深层次的东西还要细细...
      99+
      2024-04-02
    • python 数据结构之二分查找的递归和
      二分查找就是待查找的列表进行分半搜索 如下所示 二分查找普通实现: def erfen(alist, item): start = 0 end = len(alist) - 1 while start <...
      99+
      2023-01-30
      递归 数据结构 python
    • java如何实现二分法查找
      小编给大家分享一下java如何实现二分法查找,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!二分法查找//前提必须是在有序的条件下...
      99+
      2024-04-02
    • Python二分查找算法怎么应用
      本篇内容主要讲解“Python二分查找算法怎么应用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python二分查找算法怎么应用”吧!1. 算法描述二分法是一种效率比较高的搜索方法回忆之前做过的...
      99+
      2023-07-02
    • java如何使用二分查找数组中指定元素
      这篇文章给大家分享的是有关java如何使用二分查找数组中指定元素的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。查找数组中指定元素(二分查找) 二分查找的必要条件是必须有序的数列  &...
      99+
      2023-06-27
    • Python算法练习之二分查找算法的实现
      目录1. 算法描述2. 算法分析3. 算法思路4. 代码实现纯算法实现递归法实现1. 算法描述 二分法是一种效率比较高的搜索方法 回忆之前做过的猜数字的小游戏,预先给定一个小于100...
      99+
      2024-04-02
    • 如何进行AJPFX的二分法查找
      如何进行AJPFX的二分法查找,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。package com.heima.array;public class Demo2...
      99+
      2023-06-02
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作