• 递归函数 算法之二分法 三元表达式 字典生成式 匿名函数 常用的内置函数(map、zip、reduce)


    递归函数:

    递归函数包括两个过程:

      回溯:

        就是一次次的重复的过程,但是在每次重复的过程中要让你的复杂度随着重复的次数一次次降低,还需要最终有一个结束的条件。

      递推:

        一次次回溯之后往回推导的过程。

    递归函数:

    age(5) = age(4) + 2
    age(4) = age(3) + 2
    age(3) = age(2) + 2
    age(2) = age(1) + 2
    age(1) = 18
    用递归函数实现为:
    def get_age(n):            
        if n == 1: #结束条件            
            return 18          
        age = get_age(n-1)+2   
        return age             
    age = get_age(5)           
    print(age)                 
    l = [1,[2,[3,[4,[5,[6,[7,[8,[9,[10,[11,[12,[13,]]]]]]]]]]]]]
    # 将列表中的数字依次打印出来(循环的层数是你必须要考虑的点)
    1 def get_value(l):
    2       for i in l :
    3           if type(i) is int :
    4               print(i)
    5           else:
    6               get_value(i)
    7 get_value(l)
    View Code

    递归函数通常不需要考虑回溯的次数,但是结束条件必须考虑。

    算法之二分法:

    二分法的使用条件:容器类型中的数据必须是按顺序排列的

    #二分法
    l1 = [1,3,5,12,57,89,101,123,146,167,179,189,345]
    def find_num(l,n):
        res = len(l)
        index_mid = res // 2
        if n < l[index_mid]:
            l_right = l[0:index_mid]
            print(l_right)
            find_num(l_right,n)
        elif n > l[index_mid]:
            l_left = l[index_mid:]
            find_num(l_left,n)
            print(l_left)
        else:
            print('find it',n)
    find_num(l1,3)

    三元表达式:

    x = 3
    y = 5
    value = x if x > y else y
    print(value)
    if 条件成立则value=左边的值x,条件不成立,则value=右边的值y
    python不推荐三元表达式中套三元表达式,只推荐在结果只有两种的条件下使用。
    列表生成器:
    1 l = ['zhao','qian','sun','li']
    2 value = ['{}_yang'.format(name) for name in l]
    3 #表示for循环列表l中的元素,按照for前面的格式存放到value列表中
    4 print(value)
    5 value1 = ['{}'.format(name) for name in value if name.endswith('_yang')]
    6 #表示先for循环value类表中的元素,在进行后面的if判断,满足条件的元素按照for前面的格式进行输出
    7 print(value1)
    View Code
    1 l = ['zhao','qian','sun','li']
    2 value = ['{}_yang'.format(name) for name in l]
    3 #表示for循环列表l中的元素,按照for前面的格式存放到value列表中
    4 print(value)
    5 value1 = ['{}'.format(name) for name in value if name.endswith('_yang')]
    6 #表示先for循环value类表中的元素,在进行后面的if判断,满足条件的元素按照for前面的格式进行输出
    7 print(value1)
    View Code

    字典生成式:

    #进行一一对应生成字典
    l1 = ['name','password','hobby']
    l2 = ['jason','123','DBJ','egon']
    d = {}
    for i,j in enumerate(l1):
        d[j] = l2[i]
    print(d)
    l = ['yang','zhao','qian']
    #for循环i是列表l的索引,而j是列表l中的元素,满足if的条件之后,按照for前面的格式进行输出生成字典
    res = {i:j for i,j in enumerate(l) if i!=1}
    print(res)
    l[1,2,3,4,5,6]
    #这样写不是元组生成式,而是生成器表达式,得到的值是个“老母猪”
    
    res = (i for i in l )
    
    print(res)     #<generator object <genexpr> at 0x000001CBC215B200>
    
    for i in res:
    
    print(i)

    匿名函数:

      没有名字,临时存在用完就没了

    #:前面存放的是形参x,y后面存放的是匿名函数的返回值
    
    # 匿名函数通常不会单独使用,是配合内置函数一起使用
    
    res = (lambda x,y:x+y)(1,2)
    
    print(res)

    常用的内置函数:

    d = {
    
        'egon':30000,
        'jason':88888888888,
        'nick':3000,
        'tank':1000
    }
    print(max(d,key=lambda name:d[name]))
    #在不指定key的的情况下会按照字典d的key值进行for循环比较,在指定key后会按照匿名函数lambda得到的值进行for循环比较,本题中也即value值。但返回的是按值比较的到的d中key的值。
    #也即按薪资比较返回人名
    # map 映射
    l = [1,2,3,4,5,6]
    print(list(map(lambda x:x*2,l)))
    # 通过for循环将l中的值传入匿名函数的形参中,最后形成列表
    
    # zip 拉链 # 基于for循环
    l1 = [1,2,3]
    l2 = ['jason','egon','tank']
    l3 = ['a','b','c']
    print(list(zip(l1,l2)))
    print(list(zip(l1,l2,l3)))
    # 基于for循环将l1,l2,l3将三个列表中的元素一一对应形成列表中套元组的形式
    
    # reduce 模块
    from functools import reduce
    l = [1,2,3,4,5,6]
    print(reduce(lambda x,y:x+y,l,19)) # 19是指定的初始值,然后按照for循环将l中的值传给匿名函数进行两两,若不指定初始值,会先从列表中取出两个值。
  • 相关阅读:
    30个实例详解TOP命令
    CentOS6 启动流程图文解剖
    Linux常用性能检测命令解释
    Linux 多核下绑定硬件中断到不同 CPU(IRQ Affinity) 转
    linux系统中如何查看日志 (常用命令2)
    Linux下常用的shell命令记录1
    python import as from
    内存的大小端模式
    opencv笔记1
    代码不仅仅考虑性能
  • 原文地址:https://www.cnblogs.com/yangjiaoshou/p/11177175.html
Copyright © 2020-2023  润新知