Pythonic版二分查找实现过程原理解析


Posted in Python onAugust 11, 2020

前提:升序数组,待查元素在数组中。

二分查找:就是一个递归函数c。待查元素a,当前数组中位数b,如果b=a则返回b的索引,b>a则在b左侧的子数组中调用函数c,否则在b右侧子数组中调用函数c。

第一次思考,按着上面的思路编程后的结果:

def binary_search(index, a, value):
  if a[(len(a) - 1) // 2] == value:
    return index + (len(a) - 1) // 2
  elif a[(len(a) - 1) // 2] < value:
    return binary_search(index + (len(a) - 1) // 2 + 1, a[(len(a) - 1) // 2 + 1:], value)
  else:
    return binary_search(index, a[0:(len(a) - 1) // 2 + 1], value)

第二次思考,简化中位数计算逻辑:

def binary_search(index, a, value):
  if a[len(a) // 2] == value:
    return index + len(a) // 2
  elif a[len(a) // 2] < value:
    return binary_search(index + len(a) // 2, a[len(a) // 2:], value)
  else:
    return binary_search(index, a[0:len(a) // 2], value)

第三次思考,去掉return,改为lambda形式:

binary_search = lambda index,a,value: index + len(a) // 2 if a[len(a) // 2] == value else binary_search(index + len(a) // 2, a[len(a) // 2:], value) if a[len(a) // 2] < value else binary_search(index, a[0:len(a) // 2], value)

以上就是二分查找变为“一行代码”版的过程。

运行测试:

if __name__ == '__main__':
  a = [1, 2, 33, 43, 52, 66, 88, 99, 111, 120]
  print(f"Target index: {binary_search(0, a, value=33)}")

结果如下:

Pythonic版二分查找实现过程原理解析

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现的二叉树算法和kmp算法实例
Apr 25 Python
python实现自动重启本程序的方法
Jul 09 Python
Python中的多行注释文档编写风格汇总
Jun 16 Python
python的多重继承的理解
Aug 06 Python
python编程实现12306的一个小爬虫实例
Dec 27 Python
python 把文件中的每一行以数组的元素放入数组中的方法
Apr 29 Python
python实现textrank关键词提取
Jun 22 Python
Python实现点阵字体读取与转换的方法
Jan 29 Python
Python FTP文件定时自动下载实现过程解析
Nov 12 Python
使用TensorFlow-Slim进行图像分类的实现
Dec 31 Python
Python greenlet和gevent使用代码示例解析
Apr 01 Python
python3访问字典里的值实例方法
Nov 18 Python
Python3合并两个有序数组代码实例
Aug 11 #Python
Python基于gevent实现文件字符串查找器
Aug 11 #Python
Python3如何实现Win10桌面自动切换
Aug 11 #Python
Python3如何使用多线程升程序运行速度
Aug 11 #Python
使用Python pip怎么升级pip
Aug 11 #Python
python中通过pip安装库文件时出现“EnvironmentError: [WinError 5] 拒绝访问”的问题及解决方案
Aug 11 #Python
Python 代码调试技巧示例代码
Aug 11 #Python
You might like
php的list()的一步操作给一组变量进行赋值的使用
2011/05/18 PHP
php实现的验证码文件类实例
2015/06/18 PHP
学习php设计模式 php实现合成模式(composite)
2015/12/08 PHP
PHP命名空间和自动加载类
2016/04/03 PHP
PHP设置Cookie的HTTPONLY属性方法
2017/02/09 PHP
PHP文件管理之实现网盘及压缩包的功能操作
2017/09/20 PHP
php 中序列化和json使用介绍
2013/07/08 Javascript
返回页面顶部top按钮通过锚点实现(自写)
2013/08/30 Javascript
jQuery源码解读之removeAttr()方法分析
2015/02/20 Javascript
jquery插件jquery.beforeafter.js实现左右拖拽分隔条对比图片的方法
2015/08/07 Javascript
让图片跳跃起来  javascript图片轮播特效
2016/02/16 Javascript
JavaScript学习小结之使用canvas画“哆啦A梦”时钟
2016/07/24 Javascript
利用AngularJs实现京东首页轮播图效果
2016/09/08 Javascript
微信小程序动态的加载数据实例代码
2017/04/14 Javascript
利用types增强vscode中js代码提示功能详解
2017/07/07 Javascript
基于Vue、Vuex、Vue-router实现的购物商城(原生切换动画)效果
2018/01/09 Javascript
jQuery实现的鼠标拖动画矩形框示例【可兼容IE8】
2019/05/17 jQuery
JS中自定义事件的使用与触发操作实例分析
2019/11/01 Javascript
vue-router结合vuex实现用户权限控制功能
2019/11/14 Javascript
JavaScript实现Tab选项卡切换
2020/02/13 Javascript
vue中keep-alive内置组件缓存的实例代码
2020/04/16 Javascript
在vue中实现给每个页面顶部设置title
2020/07/29 Javascript
解决vue项目中出现Invalid Host header的问题
2020/11/17 Javascript
javascript实现左右缓动动画函数
2020/11/25 Javascript
[49:21]TNC vs VG 2019DOTA2国际邀请赛淘汰赛 胜者组赛BO3 第三场 8.20.mp4
2019/08/22 DOTA
Django学习笔记之Class-Based-View
2017/02/15 Python
解决python3.5 正常安装 却不能直接使用Tkinter包的问题
2019/02/22 Python
记录一下scrapy中settings的一些配置小结
2020/09/28 Python
魔声耳机官方网站:Monster是世界第一品牌的高性能耳机
2016/10/26 全球购物
高考励志标语
2014/06/05 职场文书
党干部专题民主生活会对照检查材料思想汇报
2014/10/06 职场文书
期末考试复习计划
2015/01/19 职场文书
优秀学生干部主要事迹材料
2015/11/04 职场文书
pytorch 中autograd.grad()函数的用法说明
2021/05/12 Python
SQL写法--行行比较
2021/08/23 SQL Server
SpringBoot整合Redis入门之缓存数据的方法
2021/11/17 Redis