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实现dict版图遍历示例
Feb 19 Python
Python数据分析之双色球统计两个红和蓝球哪组合比例高的方法
Feb 03 Python
Python3 pip3 list 出现 DEPRECATION 警告的解决方法
Feb 16 Python
windows上安装python3教程以及环境变量配置详解
Jul 18 Python
用Python爬取QQ音乐评论并制成词云图的实例
Aug 24 Python
python如何使用jt400.jar包代码实例
Dec 20 Python
python实现双色球随机选号
Jan 01 Python
解决Python发送Http请求时,中文乱码的问题
Apr 30 Python
如何利用Python识别图片中的文字
May 31 Python
opencv之颜色过滤只留下图片中的红色区域操作
Jun 05 Python
Keras中的多分类损失函数用法categorical_crossentropy
Jun 11 Python
用PYTHON去计算88键钢琴的琴键频率和音高
Apr 10 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 字符串编码截取函数(兼容utf-8和gb2312)
2009/05/02 PHP
PHP实现多进程并行操作的详解(可做守护进程)
2013/06/18 PHP
php函数与传递参数实例分析
2014/11/15 PHP
thinkphp在php7环境下提示Cannot use ‘String’ as class name as it is reserved的解决方法
2016/09/30 PHP
php连接sftp的作用以及实例代码
2019/09/23 PHP
Extjs学习笔记之六 面版
2010/01/08 Javascript
悄悄用脚本检查你访问过哪些网站的代码
2010/12/04 Javascript
JS原型对象通俗&quot;唱法&quot;
2012/12/27 Javascript
js自动生成的元素与页面原有元素发生堆叠的解决方法
2013/10/24 Javascript
js前端实现图片懒加载(lazyload)的两种方式
2017/04/24 Javascript
基于jQuery实现图片推拉门动画效果的两种方法
2017/08/26 jQuery
vue element项目引入icon图标的方法
2018/06/06 Javascript
在小程序中使用canvas的方法示例
2018/09/17 Javascript
微信小程序自定义可滑动顶部TabBar选项卡实现页面切换功能示例
2019/05/14 Javascript
Vue中的组件及路由使用实例代码详解
2019/05/22 Javascript
bootstrap-paginator服务器端分页使用方法详解
2020/02/13 Javascript
动态实现element ui的el-table某列数据不同样式的示例
2021/01/22 Javascript
[13:18]《一刀刀一天》之DOTA全时刻21:详解TI新赛制 A队再露獠牙
2014/06/24 DOTA
[01:04:14]VP vs TNC 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
使用python实现接口的方法
2017/07/07 Python
学习python中matplotlib绘图设置坐标轴刻度、文本
2018/02/07 Python
Python基本数据结构之字典类型dict用法分析
2019/06/08 Python
Django框架之登录后自定义跳转页面的实现方法
2019/07/18 Python
使用python matplotlib 画图导入到word中如何保证分辨率
2020/04/16 Python
Python tkinter之Bind(绑定事件)的使用示例
2021/02/05 Python
h5封装下拉刷新
2020/08/25 HTML / CSS
维珍澳洲航空官网:Virgin Australia
2017/09/08 全球购物
请写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1
2015/07/16 面试题
试用期转正鉴定评语
2014/01/27 职场文书
建筑安全生产责任书
2014/07/22 职场文书
知识就是力量演讲稿
2014/09/13 职场文书
开展党的群众路线教育实践活动剖析材料
2014/10/13 职场文书
雨雪天气温馨提示
2015/07/15 职场文书
中秋节祝酒词
2015/08/12 职场文书
C3 线性化算法与 MRO之Python中的多继承
2021/10/05 Python
Win11软件图标固定到任务栏
2022/04/19 数码科技