编程语言
首页 > 编程语言> > day05 (python进阶----二分法----匿名函数)

day05 (python进阶----二分法----匿名函数)

作者:互联网

一、二分法

二分法:就是高效解决问题的办法 需求:有一个按照从小到大顺序排列的数字列表,需要从该数字列表中找到我们想要的某一个数字 如何快速找到呢?

有需求:nums=[-1,5,3,8,11,80,100] ,我想要快速找到100.
没学二分法之前:

nums=[-1,5,3,8,11,80,100]
find_num=100  #需要找的值
nums.sort()   #这里排序一下先
print(nums)

# 方案一:要把所有值都取出来才能找到,效率太低,而且占内存
for num in nums:
    if num == find_num:
        print('find it')
        break

当我们学完二分法公式:
 

二分法如下公式:
# def f(find_num,列表):
#     res=找列表中间的值
#     if find_num > res:
#         # 接下来的查找应该是在列表的右半部分
#         列表=列表切片右半部分
#         f(find_num,列表)
#     elif find_num < res:
#         # 接下来的查找应该是在列表的左半部分
#         列表=列表切片左半部分
#         f(find_num,列表)
#     else:
#         print('find it')

套用这个公式和思路,把上面的需求拿过来:
 

nums=[-1,5,3,8,11,80,100]
find_num=100
def f(find_num,l):
    print(l)
    if len(l) == 0:
        print('找的值不存在')
        return
    res=len(l) // 2   #中间值

    if find_num > l[res]:
        # 接下来的查找应该是在列表的右半部分
        l=l[res+1:]      #这里+1 是因为切片顾头不顾尾,而res刚刚已经和find_num比较过了  所有这里+1
        f(find_num,l)
    elif find_num < l[res]:
        # 接下来的查找应该是在列表的左半部分
        l=l[:res]
        f(find_num,l)
    else:
        print('find it')

f(find_num,nums)

这样如果我们列表及时有上万个,我们不用循环把所有的值遍历出来,也可以快速的找出来我们想到的值,这就是二分法。

二、匿名函数

匿名函数:就是没有名字的函数,只用于临时使用一次的场景
其最简单的公式如下

普通函数想要得到1+2=3是这样的
def func(x,y):
    return x+y
print(func(1,2))

+

而我们匿名函数lambda是这样的(他并没有去定义一个变量名)
print((lambda x,y:x+y)(1,2))   #一行代码,简单粗暴,用完就扔

匿名函数应用:找工资最高,示例:
 

salaries = {
    "yeqing1": 3600,
    "yeqing2": 3000,
    "yeqing3": 4000
}
# 取工资最高的那个人的名字
# max的应用   找最高
def func(k):
    return salaries[k]

res=max(salaries,key=func)
print(res)

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)

标签:二分法,进阶,res,salaries,列表,----,num,print,find
来源: https://blog.csdn.net/yeangqing/article/details/122143084