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新手编程过程中如何规避一些常见问题的建议
Apr 01 Python
Python中判断输入是否为数字的实现代码
May 26 Python
python2与python3爬虫中get与post对比解析
Sep 18 Python
使用Python 自动生成 Word 文档的教程
Feb 13 Python
解决jupyter notebook 前面书写后面内容消失的问题
Apr 13 Python
Python restful框架接口开发实现
Apr 13 Python
python filecmp.dircmp实现递归比对两个目录的方法
May 22 Python
Python 字典中的所有方法及用法
Jun 10 Python
Tensorflow使用Anaconda、pycharm安装记录
Jul 29 Python
浅析PyCharm 的初始设置(知道)
Oct 12 Python
通过代码简单了解django model序列化作用
Nov 12 Python
Python如何配置环境变量详解
May 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
Get或Post提交值的非法数据处理
2006/10/09 PHP
用来给图片加水印的PHP类
2008/04/09 PHP
PHP容易被忽略而出错陷阱 数字与字符串比较
2011/11/10 PHP
php加密之discuz内容经典加密方式实例详解
2017/02/04 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
2018/02/08 PHP
PHP 文件写入和读取操作实例详解【必看篇】
2019/11/04 PHP
CSS3画一个阴阳八卦图
2021/03/09 HTML / CSS
js面向对象编程之如何实现方法重载
2014/07/02 Javascript
整理Javascript数组学习笔记
2015/11/29 Javascript
jQuery常用知识点总结以及平时封装常用函数
2016/02/23 Javascript
jQuery使用serialize()表单序列化时出现中文乱码问题的解决办法
2016/07/27 Javascript
js日期相关函数dateAdd,dateDiff,dateFormat等介绍
2016/09/24 Javascript
Angular表格神器ui-grid应用详解
2017/09/29 Javascript
mustache.js实现首页元件动态渲染的示例代码
2020/12/28 Javascript
python连接mysql调用存储过程示例
2014/03/05 Python
django基础学习之send_mail功能
2019/08/07 Python
关于Python形参打包与解包小技巧分享
2019/08/24 Python
python处理document文档保留原样式
2019/09/23 Python
python连接PostgreSQL过程解析
2020/02/09 Python
Django操作session 的方法
2020/03/09 Python
Django数据结果集序列化并展示实现过程
2020/04/22 Python
python属于解释型语言么
2020/06/15 Python
Python学习之路之pycharm的第一个项目搭建过程
2020/06/18 Python
CSS3结构性伪类选择器九种写法
2012/04/18 HTML / CSS
Europcar美国/加拿大:预订汽车或卡车租赁服务
2018/11/13 全球购物
澳大利亚优惠网站:Deals.com.au
2019/07/02 全球购物
洗发水广告词
2014/03/13 职场文书
2014个人年度工作总结范文
2014/12/24 职场文书
大学教师个人总结
2015/02/10 职场文书
幼儿园毕业典礼园长致辞
2015/07/29 职场文书
2016年教师节特级教师获奖感言
2015/12/09 职场文书
使用css样式设计一个简单的html登陆界面的实现
2021/03/30 HTML / CSS
pytorch显存一直变大的解决方案
2021/04/08 Python
一篇文章弄懂Python关键字、标识符和变量
2021/07/15 Python
基于Redis结合SpringBoot的秒杀案例详解
2021/10/05 Redis
分享提高 Python 代码的可读性的技巧
2022/03/03 Python