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 读写txt文件 json文件的实现方法
Oct 22 Python
python dataframe astype 字段类型转换方法
Apr 11 Python
在python中利用最小二乘拟合二次抛物线函数的方法
Dec 29 Python
对python中GUI,Label和Button的实例详解
Jun 27 Python
程序员的七夕用30行代码让Python化身表白神器
Aug 07 Python
numpy.transpose()实现数组的转置例子
Dec 02 Python
TensorFlow实现从txt文件读取数据
Feb 05 Python
jupyter notebook 参数传递给shell命令行实例
Apr 10 Python
如何用Matplotlib 画三维图的示例代码
Jul 28 Python
在Python中字典按值排序的实现方法
Nov 12 Python
python中用ctypes模拟点击的实例讲解
Nov 26 Python
Python语法学习之进程的创建与常用方法详解
Apr 08 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中怎么搜索相关联数组键值及获取之
2013/10/17 PHP
PHP中nowdoc和heredoc使用需要注意的一点
2014/03/21 PHP
PHP数据库操作Helper类完整实例
2016/05/11 PHP
php生成静态页面并实现预览功能
2019/06/27 PHP
PHP pthreads v3在centos7平台下的安装与配置操作方法
2020/02/21 PHP
JQuery.Ajax之错误调试帮助信息介绍
2013/07/04 Javascript
jquery select 设置默认选中的示例代码
2014/02/07 Javascript
简单的js图片轮换代码(js图片轮播)
2014/05/06 Javascript
jquery实现最简单的滑动菜单效果代码
2015/09/12 Javascript
表单验证插件Validation应用的实例讲解
2015/10/10 Javascript
【经典源码收藏】jQuery实用代码片段(筛选,搜索,样式,清除默认值,多选等)
2016/06/07 Javascript
文本框只能输入数字的实现方法(兼容IE火狐)
2016/06/25 Javascript
form表单转Json提交的方法(推荐)
2016/09/23 Javascript
AngularJS验证信息框架的封装插件用法【w5cValidator扩展插件】
2016/11/03 Javascript
jQuery插件HighCharts绘制2D带有Legend的饼图效果示例【附demo源码下载】
2017/03/10 Javascript
ionic 自定义弹框效果
2017/06/27 Javascript
详解vue 在移动端体验上的优化解决方案
2019/05/20 Javascript
element-ui table行点击获取行索引(index)并利用索引更换行顺序
2020/02/27 Javascript
Vue-cli3生成的Vue项目加载Mxgraph方法示例
2020/05/31 Javascript
[49:21]2018DOTA2亚洲邀请赛3月30日 小组赛B组 Effect VS iG
2018/03/31 DOTA
Python实现矩阵加法和乘法的方法分析
2017/12/19 Python
python+opencv实现阈值分割
2018/12/26 Python
Python+Selenium使用Page Object实现页面自动化测试
2019/07/14 Python
Python笔记之代理模式
2019/11/20 Python
python redis 批量设置过期key过程解析
2019/11/26 Python
Jupyter Notebook输出矢量图实例
2020/04/14 Python
CSS3 @font-face属性使用指南
2014/12/12 HTML / CSS
Canvas绘制浮动球效果的示例
2017/12/29 HTML / CSS
HTML5 Blob对象的具体使用
2020/05/22 HTML / CSS
委托与事件是什么关系?为什么要使用委托
2014/04/18 面试题
资源环境与城市管理专业推荐信
2013/11/30 职场文书
创业大赛策划书
2014/03/01 职场文书
校园公益广告语
2014/03/13 职场文书
美术指导求职信
2014/03/17 职场文书
体育运动会广播稿
2014/10/05 职场文书
CentOS 7安装mysql5.7使用XtraBackUp备份工具命令详解
2022/04/12 MySQL