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中实现远程调用(RPC、RMI)简单例子
Apr 28 Python
Python实现的二维码生成小软件
Jul 11 Python
python中import学习备忘笔记
Jan 24 Python
Python列表和元组的定义与使用操作示例
Jul 26 Python
django创建自定义模板处理器的实例详解
Aug 14 Python
Request的中断和ErrorHandler实例解析
Feb 12 Python
pytorch构建网络模型的4种方法
Apr 13 Python
PyQt5重写QComboBox的鼠标点击事件方法
Jun 25 Python
在Python中append以及extend返回None的例子
Jul 20 Python
基于pytorch的保存和加载模型参数的方法
Aug 17 Python
Django admin管理工具TabularInline类用法详解
May 14 Python
python ansible自动化运维工具执行流程
Jun 24 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 解决旧系统 查出所有数据分页的类
2012/08/27 PHP
PHP设计模式之命令模式的深入解析
2013/06/13 PHP
php使用CURL不依赖COOKIEJAR获取COOKIE的方法
2015/06/17 PHP
js下用gb2312编码解码实现方法
2009/12/31 Javascript
jQuery对象[0]是什么含义?
2010/07/31 Javascript
js 判断一个元素是否在页面中存在
2012/12/27 Javascript
javascript实现客户端兼容各浏览器创建csv并下载的方法
2015/03/23 Javascript
深入学习JavaScript中的原型prototype
2015/08/13 Javascript
用Angular实时获取本地Localstorage数据,实现一个模拟后台数据登入的效果
2016/11/09 Javascript
JavaScript实现瀑布流图片效果
2017/06/30 Javascript
springmvc接收jquery提交的数组数据代码分享
2017/10/28 jQuery
实例教学如何写vue插件
2017/11/30 Javascript
Angular搜索场景中使用rxjs的操作符处理思路
2018/05/30 Javascript
QRCode.js二维码生成并能长按识别
2018/10/16 Javascript
vue进入页面时不在顶部,检测滚动返回顶部按钮问题及解决方法
2019/10/30 Javascript
JavaScript实现PC端横向轮播图
2020/02/07 Javascript
微信小程序实现抖音播放效果的实例代码
2020/04/11 Javascript
解决vue项目中某一页面不想引用公共组件app.vue的问题
2020/08/14 Javascript
vue 避免变量赋值后双向绑定的操作
2020/11/07 Javascript
[02:10]DOTA2 TI10勇士令状玩法及不朽Ⅰ展示:焕新世界,如你所期
2020/05/29 DOTA
Python批量修改文件后缀的方法
2014/01/26 Python
Python 正则表达式匹配字符串中的http链接方法
2018/12/25 Python
PyQt5重写QComboBox的鼠标点击事件方法
2019/06/25 Python
对Django 转发和重定向的实例详解
2019/08/06 Python
python GUI库图形界面开发之PyQt5窗口控件QWidget详细使用方法
2020/02/26 Python
python实现logistic分类算法代码
2020/02/28 Python
基于matplotlib xticks用法详解
2020/04/16 Python
租租车:国际租车、美国租车、欧洲租车、特价预订国外租车(中文服务)
2018/03/28 全球购物
电子商务应届生求职信
2013/11/16 职场文书
高中同学聚会邀请函
2014/01/11 职场文书
省级四好少年事迹材料
2014/01/25 职场文书
校园文化建设方案
2014/02/03 职场文书
教师党员先进性教育自我剖析材料思想汇报
2014/09/24 职场文书
联谊活动总结范文
2015/05/09 职场文书
退休教师追悼词
2015/06/23 职场文书
预备党员入党感想
2015/08/10 职场文书