• 简易的表达式


    一、递归函数

    1、什么是递归函数

    所谓递归函数就是一个函数在其内部调用该函数,反复的调用下去,直到函数执行到不满足条件是停止调用并输出结果

    2、递归函数的两个阶段

    递归函数的执行可以分为两个阶段,分别为回溯和递推。

    回溯:就是一次次的重复的过程,这个重复过程必须建立在每一次重复问题的复杂度都在降低,直到有一个最终的结束条件。

    递推:一次次往回推到的过程。

    3、递归函数的使用

    递归函数在使用时不需要考虑循环的次数,只需要把握结束的条件即可。

    递归函数如果没有结束条件,将会一直运行,python内部限制最高1000次,可以通过调用os模块修改递归层数。过多的递归层数对内存不是很友好,不建议修改限制。

    def age(n):
        if n == 1:  # 必须要有结束条件n=1
            return 18
        return age(n-1) + 2
    res = age(5)
    print(res)  # 26
    l = [1,[2,[3,[4,[5,[6,[7,[8,[9,[10,[11,[12,[13,]]]]]]]]]]]]]
    def get_num(l):
        for i in l:
            if type(i) is int:
                print(i)
            else:
                get_num(i)
    
    get_num(l)  # 循环打印l中的所有数字

    二、算法之二分法

    算法:虽未算法就是解决问题的高效率的方法

    二分法:在已经排列好数字大小的有序容器中查找想要查找的数字

    target_num = 666
    l = [1,3,5,12,57,89,101,123,146,167,179,189,345]
    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)

    三、三元表达式

    三元表达式:将流程控制代码写成表达式的形式用一个变量名接收返回值。

    x = 99999
    y = 9898898
    res = x if x > y else y
    
    # 如果if后面的条件成立返回if前面的值 否则返回else后面的值
    print(res)  # 9898898

    三元表达式的固定表达式形式为:

    res = 值1 if 条件 else 值2  (条件成立 值1 条件不成立 值2)

    三元表达式的也可以嵌套多层判断:

    res = x if x > y else (m if m >n else (...))

    取值的判断与单层取值一样。

    四、列表生成式

    列表生成式:将满足条件的值放在一个列表中,生成一个新列表。

    基本形式:res = [满足添加到列表的元素 for 添加到列表的元素 in 容器类型的数据类型 if 条件判断]

    l = ['tank_sb', 'nick_sb', 'oscar_sb', 
    
    res = [name for name in l if name.endswith('_sb')]  # 后面不支持再加else的情况
    # 先for循环依次取出列表里面的每一个元素
    # 然后交由if判断  条件成立才会交给for前面的代码
    # 如果条件不成立 当前的元素 直接舍弃
    
    print(res)  # ['tank_sb', 'nick_sb', 'oscar_sb', 'sean_sb']

    五、字典生成式

    字典表达式:将满足条件的值组成键值对的形式放在一个字典中,生成一个新的列表。

    基本形式:基本形式:res = {满足条件的元素组成的健值对 for i,j in 容器类型的数据类型 if 条件判断}

    l1 = ['name','password','hobby']
    l2 = ['jason','123','DBJ','egon']
    
    d = {j:l2[i] for i,j in enumerate(l1)}
    print(d)  # {'name': 'jason', 'password': '123', 'hobby': 'DBJ'}

    六、匿名函数

    通俗点讲匿名函数就是没有名字的函数,随调随用,用完就销毁,一个临时存在的函数。

    res = (lambda x,y:x+y)(1,2)
    print(res)  # 3

    匿名函数一般和内置函数一起使用

    七、常用的内置函数

    常用的内置函数由很多,包括print、input等等。今天主要讲了map、zip、filter、sorted、reduce。

    # map zip filter sorted reduce
    
    # map 映射
    l = [1,2,3,4,5,6]
    
    print(list(map(lambda x:x+5,l)))  # [6, 7, 8, 9, 10, 11] 基于for循环
    
    
    # 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')]
    # 当zip中的容器类型的元素个数不相同时,得到的结果的元素的个数为最少元素的容器类型数据的元素个数
    
    
    l = [1,2,3,4,5,6]
    print(list(filter(lambda x:x != 3,l)))  # [1, 2, 4, 5, 6] 基于for循环
    # 按照条件过滤掉不满足条件的元素,返回满足条件的元素
    
    
    l = ['jason','egon','nick','tank']
    print(sorted(l,reverse=True))  # ['tank', 'nick', 'jason', 'egon']
    # 当l中的元素是字符串的时候,比较每个字符串的首字符的ascii码值
    # 当l中元素都是数字时,按照数字的大小做比较
    # 当reverse的值为True时为从左往右,从小到大
    # 当reverse的值为False时为从左往右,从大到小
    
    
    from functools import reduce
    l = [1,2,3,4,5,6]
    print(reduce(lambda x,y:x+y,l,19))  # 40
    # 19初始值,每次取一个参数做加法运算,算出所有数的和
    # 当初始值不存在的情况下 按照下面的规律
    # 第一次先获取两个元素 相加
    # 之后每次获取一个与上一次相加的结果再相加
  • 相关阅读:
    HashMap的C++实现
    MyString的简单实现
    C++智能指针实现
    static_cast 、const_cast、dynamic_cast、reinterpret_cast 关键字简单解释
    对数组取地址
    修改const变量
    红黑树简单总结
    MyInt的简单实现
    全排列之递归与非递归算法实现总结
    不用辅助空间的归并排序
  • 原文地址:https://www.cnblogs.com/le-le666/p/11184342.html
Copyright © 2020-2023  润新知