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内置的字符串处理函数整理
Jan 29 Python
python基础教程之对象和类的实际运用
Aug 29 Python
python 编程之twisted详解及简单实例
Jan 28 Python
Python实现线程状态监测简单示例
Mar 28 Python
python TKinter获取文本框内容的方法
Oct 11 Python
python 定义n个变量方法 (变量声明自动化)
Nov 10 Python
opencv实现静态手势识别 opencv实现剪刀石头布游戏
Jan 22 Python
Python求解正态分布置信区间教程
Nov 20 Python
tensorflow没有output结点,存储成pb文件的例子
Jan 04 Python
python3操作注册表的方法(Url protocol)
Feb 05 Python
Python networkx包的实现
Feb 14 Python
Python如何合并多个字典或映射
Jul 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 fread()使用技巧
2010/01/22 PHP
8个必备的PHP功能实例代码
2013/10/27 PHP
PHP代码实现表单数据验证类
2015/07/28 PHP
laravel框架创建授权策略实例分析
2019/11/22 PHP
PHP快速导出百万级数据到CSV或者EXCEL文件
2020/11/27 PHP
原生JavaScript实现合并多个数组示例
2014/09/21 Javascript
javascript禁止访客复制网页内容的实现代码
2015/08/05 Javascript
jQuery实现的网页竖向菜单效果代码
2015/08/26 Javascript
聊一聊Vue.js过渡效果
2016/09/07 Javascript
nodejs入门教程三:调用内部和外部方法示例
2017/04/24 NodeJs
vue项目中运用webpack动态配置打包多种环境域名的方法
2019/06/24 Javascript
layui监听工具栏的实例(操作列表按钮)
2019/09/10 Javascript
构建Vue大型应用的10个最佳实践(小结)
2019/11/07 Javascript
环形加载进度条封装(Vue插件版和原生js版)
2019/12/04 Javascript
Vue常用传值方式、父传子、子传父及非父子实例分析
2020/02/24 Javascript
微信小程序自定义navigationBar顶部导航栏适配所有机型(附完整案例)
2020/04/26 Javascript
原生JS封装拖动验证滑块的实现代码示例
2020/06/01 Javascript
[55:16]Mski vs VGJ.S Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
python数据结构树和二叉树简介
2014/04/29 Python
Python使用正则表达式获取网页中所需要的信息
2018/01/29 Python
python构建指数平滑预测模型示例
2019/11/21 Python
python随机生成大小写字母数字混合密码(仅20行代码)
2020/02/01 Python
解决Python发送Http请求时,中文乱码的问题
2020/04/30 Python
Django中的AutoField字段使用
2020/05/18 Python
如何利用python之wxpy模块玩转微信
2020/08/17 Python
Python return语句如何实现结果返回调用
2020/10/15 Python
python两种获取剪贴板内容的方法
2020/11/06 Python
主要的Ajax框架都有什么
2013/11/14 面试题
金融专业毕业生自荐信
2014/06/26 职场文书
2015年乡镇发展党员工作总结
2015/03/31 职场文书
开会迟到检讨书范文
2015/05/06 职场文书
公司老总年会致辞
2015/07/30 职场文书
干货:如何写好工作总结报告!
2019/05/10 职场文书
写给消防战士们的一封慰问信
2019/10/07 职场文书
python 爬取华为应用市场评论
2021/05/29 Python
win10输入法不见了只能打出字母怎么解决?
2022/08/05 数码科技