一 二分法
算法:是高效解决问题的办法
需求:有一个按照从小到大顺序排列的数字列表,需要从该里诶博爱中找到我们想要的那个数字
方法一:整理遍历效率太低
nums=[-3,4,7,10,13,21,43,77,89]
def func(x, nums):
for i in nums:
if x == i:
print('find it')
break
func(10,nums)
方法二:二分法
伪代码:
def binary_seach(find_num, 列表): #find_num 为要找的数字
if 列表 == 0:
print('该值不存在')
return
mid_val= len(列表)//2 #mid_val为列表中间元素索引
if find_num > nums[mid_val]:
#若大于的话,说明要找的数字在列表的右半部分
列表 = 列表[mid_val+1:]
binary_seach(find_num, 列表)
elif: find_num < nums[mid_val]:
#若小于的话,说明要找的数字在列表的左半部分
列表 = 列表[:mid_val-1]
binary_seach(find_num, 列表)
else:
print('find it')
binary_num(10, nums)
具体:
def func_num(find_num, nums, count):
if len(nums) == 0:
return
mid_val = len(nums)//2
if find_num > nums[mid_val]:
print('######')
nums = nums[mid_val+1:]
count +=1
func_num(find_num, nums, count)
elif find_num < nums[mid_val]:
print('----')
nums = nums[:mid_val]
count += 1
func_num(find_num, nums, count)
else:
print(f'第{count}次 find it ')
func_num(10, nums,1)
结果展示:
----
######
----
第4次 find it
二 面向过程的编程思想
核心是'过程'二字,过程即流程,指的是做事的步骤:先什么、再什么、后干什么
基于该思想编写程序就好比设计一条流水线
优点:复杂的问题流程化,进而简单化
缺点:扩展性差
面向过程的编程思想应用场景解析:
1、不是所有的软件都需要频繁更迭:比如编写脚本
2、即便是一个软件需要频繁更迭,也并不代表这个软件所有的组成部分都需要一起更迭
三 函数式
函数式编程并非用函数编程这么简单,而是将计算机的运算视为数学意义上的运算,比起面向过程,函数式更加注重的是执行结果而非执行的过程,代表语言有:Haskell、Erlang。
1、lambda 匿名函数
lambda 关键字创建的是是没有名字的函数,即匿名函数
1、 def 用于定义函数
func = 函数的内存地址
def func(x, y):
return x+y
print(func)#内存地址
2、lambda 用于定义匿名函数
print(lambda x, y: x+y)
匿名函数与有冥函数有相同的作用域,但是匿名函数使用一次就自动释放了,其引用计数为 0,所以匿名函数通常用于临时使用一次的场景。
3、调用匿名函数
方式一:
res = (lambdax,y :x+y)(1,2)
print(res)
方式二:
func= lambdax, y:x+y
res = func(1,2)
print(res)
2、匿名函数的应用
一般匿名函数不会单独使用的,主要是为将匿名函数与其他函数配合使用
1 max应用
需求1:找出薪资最高的那个人=》lili
salaries={
'siry':3000,
'tom':7000,
'lili':10000,
'jack':2000
}
# 迭代出的内容 比较的值
# 'siry' 3000
# 'tom' 7000
# 'lili' 10000
# 'jack' 2000
第一种方法:
def func(k):
return salaris[k]
res = max(salaries, key= func) #返回值= func('salary迭代出的元素')
print(res) #lili
第二种方法:
使用 lambda 匿名函数
res = max(salaries, key= lambda x: salaries[x])
print(res)#lili
max 会将可迭代对象迭代取出,按照 key 的值进行比较来取最大值
2 min应用
取最小值功能
res=min(salaries,key=lambda k:salaries[k])
print(res)
3 sorted的应用
排序功能
res=sorted(salaries,key=lambda k:salaries[k],reverse=True) #reverse= True :降序 ; False or 不写:默认升序
print(res)
4 reduce 的应用
reduce:将可迭代对象中元素取出后与初始值(r如果不写默认为 0)一一进行合并,最终返回为一个值。
fron functools import reduce
res = reduce(lambda x : x+y, [1,2,3], 10) # 10w为初始化值,如果不写默认为 0
print(res) #16
res=reduce(lambda x,y:x+y,['a','b','c']) # 'a','b'
print(res) #abc