二分法/面向思想/匿名函数
时间:2020-03-26
本文章向大家介绍二分法/面向思想/匿名函数,主要包括二分法/面向思想/匿名函数使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
算法:是高效解决问题的办法
算法之二分法
需求:有一个按照从小到大顺序排列的数字列表
需要从该数字列表中找到我们想要的那个一个数字
如何做更高效???
nums=[-3,4,7,10,13,21,43,77,89] find_num=10 nums=[-3,4,13,10,-2,7,89] nums.sort() print(nums)
方案一:整体遍历效率太低 for num in nums: if num == find_num: print('find it') break 方案二:二分法 def binary_search(find_num,列表): mid_val=找列表中间的值 if find_num > mid_val: # 接下来的查找应该是在列表的右半部分 列表=列表切片右半部分 binary_search(find_num,列表) elif find_num < mid_val: # 接下来的查找应该是在列表的左半部分 列表=列表切片左半部分 binary_search(find_num,列表) else: print('find it')
二分法例子
nums=[-3,4,7,10,13,21,43,77,89] find_num=8 def binary_search(find_num,l): print(l) if len(l) == 0: print('找的值不存在') return mid_index=len(l) // 2 if find_num > l[mid_index]: # 接下来的查找应该是在列表的右半部分 l=l[mid_index+1:] binary_search(find_num,l) elif find_num < l[mid_index]: # 接下来的查找应该是在列表的左半部分 l=l[:mid_index] binary_search(find_num,l) else: print('find it') binary_search(find_num,nums)
面向过程/对象
编程范式/思想
在我们写代码的时候我们从何入手,不同的思想会让我们有不同的着重点。
面向过程和函数式便是众多编程思想中的两个流派
强调:不同的范式应用于不同场景他们本身没有好坏之分
2 面向过程
面向过程的重点就是过程,做一件事要先做什么,后做什么,类似于流水线
优点:讲复杂的问题流程化,简单化
缺点:程序的可扩展性差,因为一套流程通常是死的,我们通常不能用a流程去完成b事物
应用场景:面向过程的程序设计一般用于那些功能一旦实现之后就很少需要改变的场景, 如果你只是写一些简单的脚本,去做一些一次性任务,用面向过程去实现是极好的,但如果你要处理的任务是复杂的,且需要不断迭代和维护, 那还是用面向对象最为方便。
函数式
函数式编程并非用函数编程这么简单,而是将计算机的运算视为数学意义上的运算,比起面向过程,函数式更加注重的是执行结果而非执行的过程,代表语言有:Haskell、Erlang。而python并不是一门函数式编程语言,但是仍为我们提供了很多函数式编程好的特性,如lambda,map,reduce,filter
匿名函数与lambda
def定义有名函数 #func是存放函数的内存地址的名字 def func(x): return x
lambda #匿名函数定义 #lambda 参数1,参数2...:返回值 lambda x,y:x+y def func(x,y): return x+y #函数调用 res = (lambda x,y:x+y)(1,2) #匿名函数由于没有名字的特性,所以如果不绑定名字的话,在函数定义结束后就被当做垃圾回收了, #所以通常情况下都是直接在定义时执行函数,通常用做其他函数连用 func(1,2)
匿名函数和内置函数的应用
需求:定义一个字典,取出其中value最大的key和value最小的key
dict1 = {"hz":100,"lxt":1234,"hzxc":101} #max,min的工作原理都是迭代器 #取出其中value最大的key #max的第一个值(需要找最大值的可迭代对象,如果是字典,找最大key) res = max(dict1 key=lambda k:dict1[k]) #取出其中value最大的key res = min(dict1 key=lambda k:dict1[k]) #补充 sorted排序 sorted(dict1)#默认给key排序,得到一个列表
map,reduce,filter(了解知识)
#map = 映射 #把一个可迭代对象的每一个值拿出来当做函数的参数运行一次 l = [1,2,3,4] res = map(lambda x:x**2,l) #res是一个迭代器,它里面存放着l的每一个元素的平方 #reduce函数可以接收三个参数,一个是函数,第二个是可迭代对象,第三个是初始值 from functools import reduce l = [1,2,3,4] res = reduce(lambda x,y:x+y,l) print(res) >>>10 #1 没有初始值,reduce函数会先迭代一次array得到的值作为初始值,作为第一个值数传给x, #然后继续迭代一次l得到的值作为第二个值传给y,运算的结果为3 #2 将上一次reduce运算的结果作为第一个值传给x,然后迭代一次l得到的结果作为第二个值传给y, #依次类推,知道迭代完l的所有元素,得到最终的结果10 #过滤列表l l = [1,2,3,4] res = filter(lambda x:x>3,l) #filter会迭代列表l把得到的值传给匿名函数,如果得到结果为真,则过滤出该元素,得到一个迭代器 res >>> 4
原文地址:https://www.cnblogs.com/Tornadoes-Destroy-Parking-Lots/p/12577137.html
- 用 Python 实现雪花效果
- CentOS6.8_Spark单机部署
- 3.2 Spark调度机制
- 正则表达式中零宽断言的用法
- Spark ReadmeApache Spark
- Apache Spark快速入门
- YARN & Mesos,论集群资源管理所面临的挑战
- Requests库作者Kenneth Reitz的另一神作!虚拟环境及包管理工具Pipenv!
- 你写的单例真的对吗
- TensorFlow layers模块用法
- Spark算子详解及案例分析(分类助记)
- Spark详解07广播变量BroadcastBroadcast
- TensorFlow验证码识别
- python selenium2 开发环境搭建
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 反射:Reflect(获取类对象三种方法)
- getParameterMap()返回参数需要对应实体类类型,否则收不到----打卡
- 类对象 与 类的对象
- Lambda什么时候使用+简化匿名内部类
- PreparedStatement连接数据库实现登录验证,避免sql注入问题
- 自己封装数据库工具类
- Git---->Linux常用命令+主干、分支合并,发生冲突+当紧急任务来时,文件暂存+忽略文件不提交
- 使用servlet完成简单的登录功能(servlet与html之间跳转(重定向))
- gitee配置
- idea--->先交给git本地仓库--->再push到远程仓库
- 图书系统优化分页与搜索跳转
- 解决ie浏览器回车不刷新验证码问题
- jsp跳转jsp----------和------------jsp跳转servlet跳转jsp
- idea中下载并配置稳定版本的MAVEN,电脑环境配置 + setting.xml文件配置
- Python代码性能分析之cProfile