python基础学习-匿名函数+二分法(算法)
Posted sunshine如你
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python基础学习-匿名函数+二分法(算法)相关的知识,希望对你有一定的参考价值。
算法:是高效解决问题的办法(都是用于某种特定的场景) 需求:有一个按照从小到大顺序排列的数字列表 需要从该数字列表中找到我们想要的那个数字
示范: nums=[-3,3,6,9,10,11,16,34,56]
find_num=10
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‘)
#执行代码: def binary_search(find_num,nums): print(nums) if len(nums)==0: print(‘值不存在‘) return mid_index=len(nums)//2 if find_num >nums[mid_index]: # 接下来的查找应该是在列表的右半部分 ? nums=nums[mid_index+1:] binary_search(find_num,nums) elif find_num <nums[mid_index]: # 接下来的查找应该是在列表的左半部分 nums=nums[:mid_index] binary_search(find_num,nums) else: print(‘find it‘) ? nums=[-3,3,6,9,10,11,16,34,56] binary_search(16,nums)
二、面向过程的编程思想:
核心是“过程”两字,过程即流程,指的是做事的步骤:先什么、再什么、后干什么
基于该思想编程写程序就好比再设计一条流水线
优点:复杂的问题流程化、进而简单化
缺点:扩展性非常差
面向过程的编程思想应用场景解析:
1、不是所有的软件都需要频繁更迭:比如编写脚本
2、即便是一个软件需要频繁更迭,也不并不代表这个软件所有的组成部分都需要一起更迭
三、匿名函数
1、区别:
1.def用于定义有名函数
func=函数的内存地址
def func(x,y):
return x+y
print(func)
2.lamdab用于定义匿名函数
print(lambda x,y:x+y)
3.调用匿名函数,有返回值,绑定的是内存地址
#方式一: res=(lambda x,y:x+y)(1,2) print(res) ? #方式二: func=lambda x,y:x+y res=func(1,2) print(res)
2、匿名函数的使用场景
匿名用于临时调用一次的场景:更多的是将匿名与其他函数配合使用
1.案例:
salaries={ ‘siry‘:3000, ‘tom‘:7000, ‘lili‘:10000, ‘jack‘:2000 } ? # 迭代出的内容 比较的值 # ‘siry‘ 3000 # ‘tom‘ 7000 # ‘lili‘ 10000 # ‘jack‘ 2000 ? #示范一 def有名函数调用: def func(k): return salaries[k] ? res=max(salaries,key=func) # 返回值=func(‘siry‘) print(res) ? #示范二 lambda匿名函数调用: ? # max 应用 最大值 res=max(salaries,key=lambda k:salaries[k]) print(res) ? # min应用 最小值 res=min(salaries,key=lambda k:salaries[k]) print(res) ? #sortde应用 排序 res=sorted(salaries,key=lambda k:salaries[k]) print(res) ? #map应用 后缀(了解) list=[‘alex‘,‘lxx‘,‘wxx‘,‘xxq‘] new_list=(name+‘_dsb‘ for name in list) print(new_list) ? res=map(lambda name:name+‘_dsb‘,list) print(res)#生成器 ? ? #filter应用 过滤(了解) list=[‘alex_sb‘,‘lxx_sb‘,‘wxx‘,‘xxq‘] res=(name for name in list if name.endswith(‘sb‘)) print(res) ? res=filter(lambda name:name.endswith(‘sb‘),list) print(res) ? #reduce应用 合并(了解) from functools import reduce res=reduce(lambda x,y:x+y,[1,2,3],10) #16 print(res) res=reduce(lambda x,y:x+y,[‘a‘,‘b‘,‘c‘])#‘a‘ , ‘b‘ print(res)
以上是关于python基础学习-匿名函数+二分法(算法)的主要内容,如果未能解决你的问题,请参考以下文章
学习python的第十七天(二分法,有名函数,匿名函数,内置函数)