day20
# 算法:是高效解决问题的办法 # 算法之二分法 # 需求:有一个按照从小到大顺序排列的数字列表 # 需要从该数字列表中找到我们想要的那个一个数字 # 如何做更高效??? 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、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) # 4、匿名用于临时调用一次的场景:更多的是将匿名与其他函数配合使用 salaries = { 'siry': 3000, 'tom': 7000, 'lili': 10000, 'jack': 2000 } # 需求1:找出薪资最高的那个人=》lili # res=max([3,200,11,300,399]) # print(res) # res=max(salaries) # print(res) 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) # res=max(salaries,key=lambda k:salaries[k]) # print(res) # ========================min的应用 # res=min(salaries,key=lambda k:salaries[k]) # print(res) # ========================sorted排序 # salaries={ # 'siry':3000, # 'tom':7000, # 'lili':10000, # 'jack':2000 # } res = sorted(salaries, key=lambda k: salaries[k], reverse=True) # print(res) # ========================map的应用(了解) # l=['alex','lxx','wxx','薛贤妻'] # new_l=(name+'_dsb' for name in l) # print(new_l) # res=map(lambda name:name+'_dsb',l) # print(res) # 生成器 # ========================filter的应用(了解) # l=['alex_sb','lxx_sb','wxx','薛贤妻'] # res=(name for name in l if name.endswith('sb')) # print(res) # res=filter(lambda name:name.endswith('sb'),l) # 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)