zoukankan      html  css  js  c++  java
  • 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) 
  • 相关阅读:
    NOIP 2018 day1 题解
    公司管理与信息化基础成熟度模型
    信息化成熟度整体评估模型
    审计抽样
    正态分布
    函证决策
    SALESORDERINCOME.QVW
    ERP上线通用模板
    可转换债券分拆
    luogu 1373 小a和uim之大逃离 dp
  • 原文地址:https://www.cnblogs.com/dingbei/p/12577204.html
Copyright © 2011-2022 走看看