title: 二分法
date: 2021-10-20 20:19:11
tags:
- Typora
- Python
title: 二分法
date: 2021-10-20 20:18:43
tags:
- Typora
- Python
算法:是高效解决问题的方法
算法之二分法
需求:有一个按照从小到大顺序排序的数字列表,需要从该数字列表中找到我们想要的那个一个数字。
例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| a = [1,2,3,7,89,877,999,6888,56757,575657] b = 6888
def bibary(a,b): print(a) e = len(a) if b > a[e]: a=a[e:] bibary(a, b) elif b < a[e]: a = a[:e] bibary(a, b) else: print('have find it ')
bibary(a,b)
|
函数式编程:
函数式编程并非用函数编程这么简单,而是将计算机的运算视为数学意义上的运算,比起面向过程,函数式更加注重的是执行结果而非执行的过程,代表语言有:Haskell、Erlang。而python并不是一门函数式编程语言,但是仍为我们提饪了很多函数式编程好的特性,如lambda,map,reduce,filter
匿名函数lambda:
1.有名函数
func=函数的内存地址
def fun(a,b)
return x+y
2.匿名函数
lambda a,b:x+y #a,b为参数,无需加括号
这个x+y等于上面有名代码的return x+y
调用匿名函数:
方式一:
res=(lambda x,y:x+y)(1,2)
print(res)
相当于 匿名地址内存地址加上传递的参数
方式二:
func=lambda x,y:x+y
res=func(1,2)
print(res)
匿名函数本质不应加函数名字,可以加函数名字实现但没必要。
应用场景:
用于临时使用(调用)一次。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| salaries={ 'siry':3000, 'tom':7000, 'lili':10000, 'jack':2000 } # 迭代出的内容 比较的值 # 'siry' 3000 # 'tom' 7000 # 'lili' 10000 # 'jack' 2000
# def func(k): # return salaries[k]
# ========================max的应用 # res=max(salaries,key=func) # 返回值=func('siry') # print(res) #这里再max迭代其字典salaries时,迭代的是其key而非value,所以比较的也是key非value,想要比较key就把max中传入key=func参数,func为定义的函数(这里无需跟括号和参数因为max会自动传入参数),其功能为返回字典key对应的value,使其用value进行比较,但因这里只临时调用一次,顾应该定义为lambda函数,而无需专门定义一个有名函数。写法如下: res = max(salaries,key=lambda k:salaries[k]) print(res) # ========================min的应用 # res=min(salaries,key=lambda k:salaries[k]) # print(res)
# ========================sorted排序
#res=sorted(salaries,key=lambda k:salaries[k],reverse=True) # print(res) #这里sorted为排序,默认为key排序,传入key参数(lamdda)找到其key对应value,使其用value排序。
|