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中cPickle用法例子分享
Jan 03 Python
python脚本实现查找webshell的方法
Jul 31 Python
python中函数传参详解
Jul 03 Python
python 文件操作删除某行的实例
Sep 04 Python
Python元组及文件核心对象类型详解
Feb 11 Python
Python入门必须知道的11个知识点
Mar 21 Python
Python构建图像分类识别器的方法
Jan 12 Python
对python字典过滤条件的实例详解
Jan 22 Python
django的分页器Paginator 从django中导入类
Jul 25 Python
浅谈pytorch 模型 .pt, .pth, .pkl的区别及模型保存方式
May 25 Python
keras输出预测值和真实值方式
Jun 27 Python
Python爬取酷狗MP3音频的步骤
Feb 26 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
Apache环境下PHP利用HTTP缓存协议原理解析及应用分析
2010/02/16 PHP
PHP IPV6正则表达式验证代码
2010/02/16 PHP
php中0,null,empty,空,false,字符串关系的详细介绍
2013/06/20 PHP
动态刷新 dorado树的js代码
2009/06/12 Javascript
Javascript 面向对象(一)(共有方法,私有方法,特权方法)
2012/05/23 Javascript
如何让div span等元素能响应键盘事件操作指南
2012/11/13 Javascript
js 通用订单代码
2013/12/23 Javascript
js使用post 方式打开新窗口
2015/02/26 Javascript
jQuery实现鼠标划过展示大图的方法
2015/03/09 Javascript
DEDECMS如何为文章添加HOT NEW标志图片
2015/08/14 Javascript
纯javascript实现分页(两种方法)
2015/08/26 Javascript
使用JQuery实现Ctrl+Enter提交表单的方法
2015/10/22 Javascript
Markdown与Bootstrap相结合实现图片自适应属性
2016/05/04 Javascript
JS实现购物车特效
2017/02/02 Javascript
JavaScript实现选中文字提示新浪微博分享效果
2017/06/15 Javascript
canvas基础绘制-绚丽倒计时的实例
2017/09/17 Javascript
JQuery 选择器、DOM节点操作练习实例
2017/09/28 jQuery
JavaScript递归函数定义与用法实例分析
2019/01/24 Javascript
ant-design-vue中的select选择器,对输入值的进行筛选操作
2020/10/24 Javascript
[00:12]2018DOTA2亚洲邀请赛 Somnus丶M出阵单挑
2018/04/06 DOTA
[55:56]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.22
2019/09/05 DOTA
Python实现遍历目录的方法【测试可用】
2017/03/22 Python
python模块之time模块(实例讲解)
2017/09/13 Python
Python批处理删除和重命名文件夹的实例
2018/07/11 Python
pycharm远程开发项目的实现步骤
2019/01/20 Python
python如何通过pyqt5实现进度条
2020/01/20 Python
Python3.x+pyqtgraph实现数据可视化教程
2020/03/14 Python
Keras 数据增强ImageDataGenerator多输入多输出实例
2020/07/03 Python
css3 按钮样式简单可扩展创建
2013/03/18 HTML / CSS
泰国最新活动和优惠:Megatix
2020/05/07 全球购物
说一下mysql, oracle等常见数据库的分页实现方案
2012/09/29 面试题
会计专业毕业生推荐信
2013/11/05 职场文书
实习生自我鉴定范文
2013/12/05 职场文书
美食节目策划方案
2014/05/31 职场文书
酒店圣诞节活动总结
2015/05/06 职场文书
Nginx工作原理和优化总结。
2021/04/02 Servers