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 相关文章推荐
动态创建类实例代码
Oct 07 Python
Python使用新浪微博API发送微博的例子
Apr 10 Python
python将字典内容存入mysql实例代码
Jan 18 Python
PyQt5主窗口动态加载Widget实例代码
Feb 07 Python
Python编程argparse入门浅析
Feb 07 Python
python-opencv颜色提取分割方法
Dec 08 Python
python配置grpc环境
Jan 01 Python
Python创建或生成列表的操作方法
Jun 19 Python
Python的matplotlib绘图如何修改背景颜色的实现
Jul 16 Python
python取均匀不重复的随机数方式
Nov 27 Python
Python实现照片卡通化
Dec 06 Python
python如何将mat文件转为png
Jul 15 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
用mysql内存表来代替php session的类
2009/02/01 PHP
PHP生成验证码时“图像因其本身有错无法显示”的解决方法
2013/08/07 PHP
PHP提高编程效率的20个要点
2015/09/23 PHP
全面解读PHP的人气开发框架Laravel
2015/10/15 PHP
基于jquery的button默认enter事件(回车事件)。
2011/05/18 Javascript
js定时器的使用(实例讲解)
2014/01/06 Javascript
jquery组件使用中遇到的问题整理及解决
2014/02/21 Javascript
node.js开发中使用Node Supervisor实现监测文件修改并自动重启应用
2014/11/04 Javascript
ExpressJS入门实例
2015/01/14 Javascript
JavaScript中停止执行setInterval和setTimeout事件的方法
2015/05/14 Javascript
RequireJS入门一之实现第一个例子
2015/09/30 Javascript
node.js中fs.stat与fs.fstat的区别详解
2017/06/01 Javascript
详解AngularJS 模块化
2017/06/14 Javascript
LayUI表格批量删除方法
2018/08/15 Javascript
详解easyui 切换主题皮肤
2019/04/04 Javascript
react 不用插件实现数字滚动的效果示例
2020/04/14 Javascript
vue中使用带隐藏文本信息的图片、图片水印的方法
2020/04/24 Javascript
vue通过过滤器实现数据格式化
2020/07/20 Javascript
python cookielib 登录人人网的实现代码
2012/12/19 Python
整理Python 常用string函数(收藏)
2016/05/30 Python
实例探究Python以并发方式编写高性能端口扫描器的方法
2016/06/14 Python
Python中运算符&quot;==&quot;和&quot;is&quot;的详解
2016/10/08 Python
Python3实现发送QQ邮件功能(文本)
2017/12/15 Python
Python Django 简单分页的实现代码解析
2019/08/21 Python
Win10里python3创建虚拟环境的步骤
2020/01/31 Python
Spring @Enable模块驱动原理及使用实例
2020/06/23 Python
python help函数实例用法
2020/12/06 Python
CSS3 Pie工具推荐--让IE6-8支持一些优秀的CSS3特性
2014/09/02 HTML / CSS
Spanx塑身衣官网:美国知名内衣品牌
2017/01/11 全球购物
质量标语大全
2014/06/12 职场文书
初中数学教学反思范文
2016/02/17 职场文书
写好求职信的技巧解密
2019/05/14 职场文书
Python通过m3u8文件下载合并ts视频的操作
2021/04/16 Python
超详细Python解释器新手安装教程
2021/05/10 Python
idea搭建可运行Servlet的Web项目
2021/06/26 Java/Android
Nginx的gzip相关介绍
2022/05/11 Servers