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中bisect的用法
Sep 23 Python
Django URL传递参数的方法总结
Aug 28 Python
Flask 让jsonify返回的json串支持中文显示的方法
Mar 26 Python
详解python3中tkinter知识点
Jun 21 Python
Matplotlib中文乱码的3种解决方案
Nov 15 Python
对python的输出和输出格式详解
Dec 08 Python
python matplotlib中的subplot函数使用详解
Jan 19 Python
Python利用 utf-8-sig 编码格式解决写入 csv 文件乱码问题
Feb 21 Python
python中threading开启关闭线程操作
May 02 Python
Python坐标轴操作及设置代码实例
Jun 04 Python
matplotlib基础绘图命令之imshow的使用
Aug 13 Python
详解anaconda安装步骤
Nov 23 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
同台服务器使用缓存APC效率高于Memcached的演示代码
2010/02/16 PHP
php var_export与var_dump 输出的不同
2013/08/09 PHP
使用PHP curl模拟浏览器抓取网站信息
2013/10/28 PHP
php源码分析之DZX1.5随机数函数random用法
2015/06/17 PHP
mod_php、FastCGI、PHP-FPM等PHP运行方式对比
2015/07/02 PHP
PHP实现基于文本的摩斯电码生成器
2016/01/11 PHP
PHP操作Redis常用技巧总结
2018/04/24 PHP
laravel 事件/监听器实例代码
2019/04/12 PHP
PHP 模拟登陆功能实例详解
2019/09/10 PHP
node.js中的fs.rmdirSync方法使用说明
2014/12/16 Javascript
JQuery中DOM事件合成用法实例分析
2015/06/13 Javascript
基于JSON格式数据的简单jQuery幻灯片插件(jquery-slider)
2016/08/10 Javascript
使用javaScript实现鼠标拖拽事件
2020/04/03 Javascript
Angular实现预加载延迟模块的示例
2017/10/12 Javascript
jQuery图片加载失败替换默认图片方法汇总
2017/11/29 jQuery
vue-cli 默认路由再子路由选中下的选中状态问题及解决代码
2018/09/06 Javascript
JS隐藏号码中间4位代码实例
2019/04/09 Javascript
javascript使用链接跨域下载图片
2019/11/01 Javascript
python实现汉诺塔方法汇总
2016/07/25 Python
Empty test suite.(PyCharm程序运行错误的解决方法)
2018/11/30 Python
python之生产者消费者模型实现详解
2019/07/27 Python
简单了解python字符串前面加r,u的含义
2019/12/26 Python
基于CentOS搭建Python Django环境过程解析
2020/08/24 Python
深入研究HTML5实现图片压缩上传功能
2016/03/25 HTML / CSS
Speedo速比涛德国官方网站:世界领先的泳装品牌
2019/08/26 全球购物
资生堂英国官网:Shiseido英国
2020/12/30 全球购物
项目资料员岗位职责
2013/12/10 职场文书
银行职员思想汇报
2013/12/31 职场文书
业务内勤岗位职责
2014/04/30 职场文书
2014年“四风”问题个人整改措施
2014/09/17 职场文书
秦始皇兵马俑导游词
2015/02/02 职场文书
工作经历证明范本
2015/06/15 职场文书
消防安全主题班会
2015/08/12 职场文书
放飞理想主题班会
2015/08/14 职场文书
python爬虫--selenium模块
2021/03/31 Python
一文搞懂Golang 时间和日期相关函数
2021/12/06 Golang