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运用于数据分析的简单教程
Mar 27 Python
python实现在sqlite动态创建表的方法
May 08 Python
Python匹配中文的正则表达式
May 11 Python
Python通过Pygame绘制移动的矩形实例代码
Jan 03 Python
python爬虫中get和post方法介绍以及cookie作用
Feb 08 Python
python+selenium 定位到元素,无法点击的解决方法
Jan 30 Python
python aiohttp的使用详解
Jun 20 Python
使用python制作一个解压缩软件
Nov 13 Python
Python列表切片常用操作实例解析
Dec 16 Python
在 Python 中使用 7zip 备份文件的操作
Dec 11 Python
详解如何用Python实现感知器算法
Jun 18 Python
Python实现批量将文件复制到新的目录中再修改名称
Apr 12 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
我的群发邮件程序
2006/10/09 PHP
phpmyadmin里面导入sql语句格式的大量数据的方法
2010/06/05 PHP
thinkphp3.2中Lite文件替换框架入口文件或应用入口文件的方法
2015/05/21 PHP
PHP实现多图上传(结合uploadify插件)思路分析
2016/11/30 PHP
jQuery实战之品牌展示列表效果
2011/04/10 Javascript
jQuery插件jPaginate实现无刷新分页
2015/05/04 Javascript
JavaScript:Array类型全面解析
2016/05/19 Javascript
Javascript中的 “&amp;” 和 “|” 详解
2017/02/02 Javascript
详解Javascript百度地图接口开发文档中的类和方法
2017/02/07 Javascript
原生JS中slice()方法和splice()区别
2017/03/06 Javascript
详解vue-router 2.0 常用基础知识点之router-link
2017/05/10 Javascript
微信小程序表单验证错误提示效果
2017/05/19 Javascript
详解React Native网络请求fetch简单封装
2017/08/10 Javascript
BootStrap实现文件上传并带有进度条效果
2017/09/11 Javascript
jQuery实现的响应鼠标移动方向插件用法示例【附源码下载】
2018/08/28 jQuery
Vue自定义属性实例分析
2019/02/23 Javascript
vue 实现 rem 布局或vw 布局的方法
2019/11/13 Javascript
element 中 el-menu 组件的无限极循环思路代码详解
2020/04/26 Javascript
[02:18]DOTA2英雄基础教程 育母蜘蛛
2014/01/20 DOTA
Python中为什么要用self探讨
2015/04/14 Python
Python的Flask框架应用调用Redis队列数据的方法
2016/06/06 Python
Python图形绘制操作之正弦曲线实现方法分析
2017/12/25 Python
Python命令行解析模块详解
2018/02/01 Python
Python使用logging模块实现打印log到指定文件的方法
2018/09/05 Python
解决运行出现'dict' object has no attribute 'has_key'问题
2020/07/15 Python
python中reload重载实例用法
2020/12/15 Python
美国购买体育、音乐会和剧院门票网站:SelectATicket
2019/09/08 全球购物
C语言开发工程师测试题
2016/12/20 面试题
高中毕业生个人自我鉴定
2013/11/24 职场文书
一份创业计划书范文
2014/02/08 职场文书
数学教师个人工作总结
2015/02/06 职场文书
2015年护士医德医风自我评价
2015/03/03 职场文书
难以忽视的真相观后感
2015/06/05 职场文书
公司宣传语大全
2015/07/13 职场文书
pt-archiver 主键自增
2022/04/26 MySQL
Nginx开源可视化配置工具NginxConfig使用教程
2022/06/21 Servers