• 十一、函数递归,算法二分法,三元表达式,列表字典生成式,匿名函数,内置函数


    一、函数递归:

     函数的递归:函数在调用阶段直接或间接的又调用自身
     递归分为两个阶段
    1.回溯:就是一次次重复的过程,这个重复的过程必须建立在每一次重复问题的复杂度都应该下降
    直到有一个最终的结束条件
    2.递推:一次次往回推导的过程
    3.递归函数在运行过程中一定要有出口,否则会无限循环下去
    # 1.求4以内的和:
    def sum_numbers(num):
        if num == 1:
            return 1
        return num + sum_numbers(num - 1)
    
        # 递归特点:函数内部自己调用自己:必须要有出口
    
    
    nums = sum_numbers(4)
    print(nums)
    2.求age(1)=18,求age(5)
    2 def age(n):
    3     if n == 1:  # 必须要有结束条件
    4         return 18
    5     return age(n-1) + 2
    6 res = age(5)
    7 print(res)

    二、算法二分法

      先将一个容器类型,分割一半看是否大于或者小于,然后分割出来,进行运算

    # 算法:解决问题的高效率的方法
    l = [1,3,5,12,57,89,101,123,146,167,179,189,345]
    # num = 345
    # for i in l:
    #     if num == i:
    #         print('find it')
    
    # 二分法:容器类型里面的数字必须有大小顺序
    target_num = 666
    def get_num(l,target_num):
        if not l:
            print('你给的工资 这个任务怕是没法做')
            return
        # 获取列表中间的索引
        print(l)
        middle_index = len(l) // 2
        # 判断target_num跟middle_index对应的数字的大小
        if target_num > l[middle_index]:
            # 切取列表右半部分
            num_right = l[middle_index + 1:]
            # 再递归调用get_num函数
            get_num(num_right,target_num)
        elif target_num < l[middle_index]:
            # 切取列表左半部分
            num_left = l[0:middle_index]
            # 再递归调用get_num函数
            get_num(num_left, target_num)
        else:
            print('find it',target_num)
    
    get_num(l,target_num)
    View Code

    三、三元表达式

    如:a=5 ,b =6,比较两个数大小
    
    res = a if a>b else b  等同于   
    
    if a>b:
    
      print(a)
    
    else:
    
      print(b)

    四、列表生成式

    需求:把列表l里面字符串都添加_sb
     1. 第一种方法:
        l = ['tank','nick','oscar','sean']
    # l1 = []
    # for name in l:
    #     l1.append('%s_sb'%name)
    #     # l1.append(name + '_sb')  # 不推荐使用
    # print(1)
    #['tank_sb', 'nick_sb', 'oscar_sb', 'sean_sb']
    
    2.第二种方法:
        res =[%s_sb %name for name in l ]
        print(l)
    #需求:将尾号有_sb都打印出来
    l = ['tank_sb', 'nick_sb', 'oscar_sb', 'sean_sb','jason_NB']
    res =[name for name in l if endswith("_sb")]
    # ['tank_sb', 'nick_sb', 'oscar_sb', 'sean_sb']

    五.字典生成式

    需求将下面两个列表合成字典
    第一种方法:
    l1 = ['name', 'password', 'hobby']
    l2 = ['jason', '123', 'DBJ', 'egon']
    
    d = {}
    for i, j in enumerate(l1):
        d[j] = l2[i]   # i 是索引编号,j是l1列表所有值,然后添加到字典
    print(d)
    字典生成式方法:
    
    l1 = ['jason','123','read']
    d = {i:j for i,j in enumerate(l1) if j != '123'}
    print(d)

    六.匿名函数

    # 匿名函数
    """没有名字的函数
    匿名函数的特点:临时存在用完就没了
    """
    def my_sum(x,y):
        return x + y
    
    # res = (lambda x,y:x+y)(1,2)
    # print(res)
    # func = lambda x,y:x+y
    # print(func(1,2))
    
    # :左边的相当于函数的形参
    # :右边的相当于函数的返回值
    # 匿名函数通常不会单独使用,是配合内置函数一起使用,并且只能适合单一函数

    七、内置函数

    1.max(a,key)通常计算容器类型里面值大小

    l = [1,2,3,4,5]
    print(max(l)) # 内部是基于for循环的 最大值
    d = {
        'egon':30000,
        'jason':88888888888,
        'nick':3000,
        'tank':1000
    }
    
    print(max(d,key=lambda name:d[name]))  max(参数,key键) 当输入key是比较的是字典值大小

    比较薪资 返回人名
    print(min(d,key=lambda name:d[name]))

    2.常用内置函数  

     map zip filter sorted reduce
    # 1.map  映射 将某个函数功能逐一添加到容器里面
    l = [1,2,3,4,5,6]
    # print(list('hello'))
    print(list(map(lambda x:x+5,l)))  # 基于for循环
    #2. zip 拉链  # 基于for循环  将数据合成列表里面元组
    l1 = [1,2,]
    l2 = ['jason','egon','tank']
    l3 = ['a','b','c']
    print(list(zip(l1,l2,l3)))  # [(1, 'jason', 'a'), (2, 'egon', 'b')]
    3. filter(func,lst)函数用于过滤序列,过滤掉不符合条件的元素,返回一个filter对象。如果需要转换成列表,则可以使用list()来转换
    
    # 需求: 求1-10之间的奇数
    lis1t1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    
    # .定义函数求奇数
    def func(x):
        return x % 2 == 1
    
    # .调用filter()函数
    result = filter(func, lis1t1)
    print(list(result))
    # [1, 3, 5, 7, 9]
    4. reduce(func,lst),其中func必须要有两个参数。每次func计算的结果继续和序列的下一个元素做累积计算。
    list1 = [1, 2, 3, 4, 5, 6]
    # .导入模块
    import functools
    
    
    # .定义函数功能
    def func(a, b):
        return a + b
    
    
    result = functools.reduce(func, list1)
    print(result)
    # 21
    # 5.sorted(self,reverse = True或False) 正常是升序
    l = [1,2,3,4,5,6,7]
    print(sorted(l,reverse=True)# 4.sorted(self,reverse = True或False) 正常是升序
    reverse=False 是逆置


  • 相关阅读:
    第十三周时间进度表
    第十二周时间进度表
    第十周时间进度表
    elasticsearch(ES)日志迁移
    docker stack 部署nginx
    docker stack 部署容器监控方案(cAdvisor、Prometheus、Grafana)
    docker stack 部署 mysql 5.6
    docker stack 部署 filebeat
    docker stack 部署 redis
    docker stack 部署 seafile(http)
  • 原文地址:https://www.cnblogs.com/wukai66/p/11178386.html
Copyright © 2020-2023  润新知