使用Python实现二分法查找的示例

 更新时间:2023年04月24日 10:57:23   作者:WindMoon。  
这篇文章主要介绍了使用Python实现二分法查找的示例,二分法通常又叫二分查找,一般用于查找一个有序数组中的某个值的位置或者给定的特定值的插入位置,需要的朋友可以参考下

关于二分法的定义我就不说了,CSDN很多大牛和前辈都已经阐述的很清楚了,直接上代码。

首先,先创建一个名称为 binary_search 的函数:传递两个参数,元素列表和要查找的值。

def binary_search(_list, value):

接下来,在函数内部定义所需的变量,二分法的关键在于从列表的中间向两侧查找(表述可能不严谨,大概这个意思),所以为了直观起见,定义 left,right, mid 三个变量,分别代表:列表的起始索引,结束索引和中间索引。

    left = 0   # 列表的起始索引
    right = len(_list)   # 列表的结束索引
    mid = int((left + right)/2)  # 采用此方法,通过四舍五入刚好可以定位到列表的中间位置

接下来是实现二分查找的关键部分,先定义一个while循环,使得查找可以顺利进行,while函数内嵌套 if 分支语句实现条件判断,共有三种情况:

1. _list[mid] == value: 中间值恰好是我们需要查找的值,那么直接返回对应的索引就可以了。

2. _list[mid] > value: 要查找的值在mid的左侧,更新right 的值为mid,缩小查找范围。

3._list[mid] < value:要查找的值在mid的右侧,更新left 的值为mid,到 mid 右侧进行查找。

最后,对mid的值做一下更新,以便开始下一轮查找,同时采用 while-else语句针对没有查找到的情况进行判断,并给定一个返回值。

    while left < right:
        if _list[mid] == value:
            return mid
        elif _list[mid] > value:
            right = mid
        else:
            left = mid
        mid = int((right + left)/2)
    else:
        return -1

最后,完整代码,以及测试运行表现如下:

""" a demo realize binary search"""
 
 
def binary_search(_list, value):
    left = 0   # 列表的起始索引
    right = len(_list)   # 列表的结束索引
    mid = int((left + right)/2)  # 采用此方法,通过四舍五入刚好可以定位到列表的中间位置
    while left < right:
        if _list[mid] == value:
            return mid
        elif _list[mid] > value:
            right = mid
        else:
            left = mid
        mid = int((right + left)/2)
    else:
        return -1
 
 
index = "the index of value in the list: {}"
print(index.format(binary_search([1, 2, 3, 4, 5, 6, 7, 8, 9], 1)))

运行结果:

 没有要查找的值的情况:

到此这篇关于使用Python实现二分法查找的示例的文章就介绍到这了,更多相关Python实现二分法查找内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python实现扣除个人税后的工资计算器示例

    Python实现扣除个人税后的工资计算器示例

    这篇文章主要介绍了Python实现扣除个人税后的工资计算器,涉及Python流程控制与数学运算相关操作技巧,需要的朋友可以参考下
    2018-03-03
  • python运算符+条件结构+循环结构

    python运算符+条件结构+循环结构

    这篇文章主要介绍了python运算符、条件结构、循环结构;算术运算符、赋值运算符、逻辑运算符等一些相关内容,需要的小伙伴可以参考一下,希望对你的学习有所帮助
    2022-03-03
  • Python+OpenCV实现旋转文本校正方式

    Python+OpenCV实现旋转文本校正方式

    今天小编就为大家分享一篇Python+OpenCV实现旋转文本校正方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • Python Scrapy实战之古诗文网的爬取

    Python Scrapy实战之古诗文网的爬取

    本文将利用Python中Scrapy框架,实现爬取古诗文网上的诗词数据,具体包括诗词的标题信息。文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2022-05-05
  • 基python实现多线程网页爬虫

    基python实现多线程网页爬虫

    python是支持多线程的, 主要是通过thread和threading这两个模块来实现的,本文主要给大家分享python实现多线程网页爬虫,需要的朋友可以参考下
    2015-09-09
  • Python查找数组中数值和下标相等的元素示例【二分查找】

    Python查找数组中数值和下标相等的元素示例【二分查找】

    这篇文章主要介绍了Python查找数组中数值和下标相等的元素,结合实例形式分析了Python基于二分查找针对数组查找相关实现技巧,需要的朋友可以参考下
    2019-02-02
  • Python读取多列数据以及用matplotlib制作图表方法实例

    Python读取多列数据以及用matplotlib制作图表方法实例

    这篇文章主要给大家介绍了关于Python读取多列数据以及用matplotlib制作图表的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • 详解python中常用配置的读取方法

    详解python中常用配置的读取方法

    常见的应用配置方式有环境变量和配置文件,对于微服务应用,还会从配置中心加载配置,本文主要介绍了从环境变量、.env文件、.ini文件、.yaml文件等文件的读取配置,需要的可以参考下
    2024-01-01
  • Python复合赋值运算符由浅入深实例探究

    Python复合赋值运算符由浅入深实例探究

    这篇文章主要为大家介绍了Python复合赋值运算符由浅入深实例探究,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • Python排序搜索基本算法之插入排序实例分析

    Python排序搜索基本算法之插入排序实例分析

    这篇文章主要介绍了Python排序搜索基本算法之插入排序,结合实例形式分析了基于比较的插入排序和基于交换的插入排序实现技巧,需要的朋友可以参考下
    2017-12-12

最新评论