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打开文件并获取文件相关属性的方法
Apr 23 Python
python实现字符串和日期相互转换的方法
May 13 Python
Python协程的用法和例子详解
Sep 09 Python
TensorFlow中权重的随机初始化的方法
Feb 11 Python
Django中更改默认数据库为mysql的方法示例
Dec 05 Python
详解Django CAS 解决方案
Oct 30 Python
tensorflow实现测试时读取任意指定的check point的网络参数
Jan 21 Python
python脚本监控logstash进程并邮件告警实例
Apr 28 Python
python多进程下的生产者和消费者模型
May 07 Python
tensorflow pb to tflite 精度下降详解
May 25 Python
pycharm 实现复制一行的快捷键
Jan 15 Python
详解Python flask的前后端交互
Mar 31 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技术开发技巧分享
2010/03/23 PHP
php返回字符串中所有单词的方法
2015/03/09 PHP
PHP环形链表实现方法示例
2017/09/15 PHP
纯JAVASCRIPT图表动画插件Highcharts Examples
2011/04/16 Javascript
js日期对象兼容性的处理方法
2014/01/28 Javascript
Javascript 实现图片无缝滚动
2014/12/19 Javascript
jquery控制表单输入框显示默认值的方法
2015/05/22 Javascript
jQuery插件EnPlaceholder实现输入框提示文字
2015/06/05 Javascript
jquery实现全选和全不选功能效果的实现代码【推荐】
2016/05/05 Javascript
BootStrap智能表单实战系列(十一)级联下拉的支持
2016/06/13 Javascript
Bootstrap中定制LESS-颜色及导航条(推荐)
2016/11/21 Javascript
canvas实现环形进度条效果
2017/03/23 Javascript
Angularjs自定义指令实现分页插件(DEMO)
2017/09/16 Javascript
Angularjs 根据一个select的值去设置另一个select的值方法
2018/08/13 Javascript
Vue 通过自定义指令回顾v-内置指令(小结)
2018/09/03 Javascript
Node中对非阻塞I/O、事件循环的知识点总结
2020/01/05 Javascript
关于vue 结合原生js 解决echarts resize问题
2020/07/26 Javascript
[02:41]DOTA2英雄基础教程 亚巴顿
2014/01/02 DOTA
[02:31]《DAC最前线》之选手酒店现场花絮
2015/01/30 DOTA
在Python中封装GObject模块进行图形化程序编程的教程
2015/04/14 Python
解决安装pycharm后不能执行python脚本的问题
2019/01/19 Python
Python opencv实现人眼/人脸识别以及实时打码处理
2019/04/29 Python
Python编程快速上手——正则表达式查找功能案例分析
2020/02/28 Python
Python3.7 读取音频根据文件名生成脚本的代码
2020/04/07 Python
行政经理岗位职责
2013/11/09 职场文书
《奇妙的国际互联网》 教学反思
2014/02/25 职场文书
网络工程专业自荐信范文
2014/03/16 职场文书
经贸专业毕业生求职信范文
2014/05/01 职场文书
家庭财产分割协议书范本
2014/11/24 职场文书
教师节班会主持词
2015/07/06 职场文书
2015年暑期见闻
2015/07/14 职场文书
中学教师教学工作总结
2015/08/13 职场文书
2015年党务工作者个人工作总结
2015/10/22 职场文书
python爬取豆瓣电影TOP250数据
2021/05/23 Python
详解Python魔法方法之描述符类
2021/05/26 Python
MongoDB orm框架的注意事项及简单使用
2021/06/20 MongoDB