zoukankan      html  css  js  c++  java
  • 小学生都能学会的python(<lamda匿名函数,sorted(),filter(),map(),递归函数>)

    小学生都能学会的python(<<lamda匿名函数,sorted(),filter(),map(),递归函数,二分法>>

    1. lambda 匿名函数
    lambda 参数: 返回值

    注意:
    1. 函数的参数可以有多个. 多个参数之间⽤逗号隔开
    2. 匿名函数不管多复杂. 只能写⼀⾏, 且逻辑结束后直接返回数据
    3. 返回值和正常的函数⼀样, 可以是任意数据类型

    # def fang(x):
    #     return x**2
    #
    # # ret = fang(5)
    # # print(ret)
    #
    # zrf = lambda x : x**2 # 匿名函数 lambda 参数: 返回值
    #
    # ret = zrf(10)
    # print(ret)
    #
    # # 给函数传递两个参数a. b 返回a+b的结果
    # a = lambda a, b: a+b
    # print(a(188,35006))
    

      

      


    2. sorted 排序
    sorted(iterable, key=func, reverse=True/False)
    执行流程:
    把可迭代对象中的每一个元素拿出来, 放到func中运行. 返回一个数字. 根据数字进行排序

    #
    # lst = [1, 8, 18, 19, 97, 12, 3]
    # # lst.sort() # lst自带的排序功能
    # l2 = sorted(lst) # 排序功能
    # print(l2)
    #        0         2      2      2       0         2        2       2
    lst = ["赵瑞鑫", "刘伟", "刘能", "赵四", "王大拿", "于谦",  "范伟", "沈腾"]
    
    # def func(name):
    #     return len(name) % 3 # 返回数字
    
    l2 = sorted(lst, key=lambda name: len(name) % 3)
    print(l2)
    
    
    lst = [{"id": 1, "name": 'alex', "age": 18},
        {"id": 2, "name": 'wusir', "age": 16},
        {"id": 3, "name": 'taibai', "age": 17}]
    # 按照年龄对学⽣信息进⾏排序
    # def func(dic):
    #     return dic['age']
    # l2 = sorted(lst, key=func) # 流程: 把可迭代对象的每一项传递给函数. 函数返回一个数字. 根据这个数字完成排序
    # print(l2)
    # l3 = sorted(lst, key=lambda dic: dic['age'])
    # l4 = sorted(lst, key=lambda dic: len(dic['name']))
    # l4 = sorted(lst, key=lambda dic: ascii(dic['name'][0]))  # ord()
    # print(l4)
    

      

    3. filter 筛选
    filter(func, Iterable)
    执行流程:
    把可迭代对象中的每一个元素拿出来, 放到func中运行.返回True/False. 根据返回的True和False来决定这个数据是否保留

    # lst = [23, 28, 15, 27, 24, 22]
    # def func(age):
    #     return age > 18 and age % 2 == 0
    #
    # f = filter(lambda age: age > 18 and age % 2 == 0, lst)
    # # print(sorted(f))
    # # f = filter(func, lst)
    # # print(f)
    # # print("__iter__" in dir(f))
    #
    # for el in f:
    #     print(el)
    
    # lst = [23, 28, 15, 27, 24, 22]
    # f = filter(lambda age: age % 2 == 0, filter(lambda age: age > 18, lst))
    # print(list(f))
    
    # lst = [{"id":1, "name":'alex', "age":18},
    #  {"id":2, "name":'wusir', "age":16},
    #  {"id":3, "name":'taibai', "age":17}]
    #
    # # 筛选出年龄大于等于17岁的人
    # print(list(sorted(filter(lambda dic: dic['age'] >= 17, lst), key=lambda dic: dic['age'])))
    

      


    4. map 映射
    map(func, Iterable)
    执行流程:
    把可迭代对象中的每一个元素拿出来, 放到func中运行.返回数据就是结果

    # lst = [1,5,9,3]
    # # l1 = [i**2 for i in lst]
    # m = map(lambda x: x**2, lst)
    # print(list(m))
    
    # 计算两个列表相同位置的数据的和
    # lst1 = [1, 2, 3, 4, 5]
    # lst2 = [2, 4, 6, 8, 10]
    #
    # print(list(map(lambda x, y: x + y , lst1, lst2)))
    

      


    5. 递归(难点)
    自己调用自己
    递归的入口
    递归的出口: return
    递归的循环条件:动
    循环树形结构:

    # # 递归
    # def func():
    #     print("我叫李嘉诚")
    #     func() # 递归的入口
    #
    # # 调用函数
    # func()
    
    # 用递归实现1-100
    # import sys
    # sys.setrecursionlimit(5000) # 设置递归的最大深度, 一般不要改.
    #
    # def func(index):
    #     print(index)
    #     func(index + 1)
    #
    # func(1) # 递归的深度: 1000 但是到不了1000, 997 - 998
    
    
    
    # 遍历某文件夹内的所有文件和文件夹
    
    import os
    # 树形结构的遍历
    def func(file_path, ceng):
        # 获取到路径下的所有文件
        lst = os.listdir(file_path) # 得到文件夹里的所有文件和文件夹
        for file in lst: # 文件名
            # 获取到文件的全路径
            full_path = os.path.join(file_path, file) # D:python学院s16第一阶段day01 认识python 变量 数据类型 条件if语句
            if os.path.isdir(full_path): # 判断这个路径是否是一个文件夹
                print("	"*ceng, file)
                func(full_path, ceng+1)
            else:
                print("	"*ceng, file)
        else:
            return
    func("D:python学院s16第一阶段", 0)
    

      


    6. 二分法查找
    核心思想: 掐头结尾取中间.
    前提条件: 有序.

    # 二分法查找的效率特别高.
    # 缺点: 有序序列
    #
    # lst = [1,8,16,32,55,78,89,1,5,4,7,5,9,6,8,5,4,5,44,5,2,1,4,5,1]
    # # [1, 1, 1, 1, 2, 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 7, 8, 8, 9, 16, 32, 44, 55, 78, 89]
    # lst = sorted(lst)
    # n = int(input("请输入一个数:"))
    # left = 0
    # right = len(lst) - 1
    #
    # while left <= right: #
    #
    #     mid = (left + right) // 2  # 索引只能是整数
    #     if n > lst[mid]:
    #         left = mid + 1
    #     elif n < lst[mid]:
    #         right = mid - 1
    #     else:
    #         print("在这个列表中.所在的位置%s" % mid)
    #         break
    # else:
    #     print("你要找的数. 不在这个序列中")
    
    
    # 递归的第一套方案
    # def func(n, lst):
    #     left = 0
    #     right = len(lst) - 1
    #     if left <= right:
    #         mid = (left + right)//2
    #         if n > lst[mid]:
    #             new_lst = lst[mid+1:]
    #             return func(n, new_lst)
    #         elif n < lst[mid]:
    #             new_lst = lst[:mid]
    #             return func(n, new_lst)
    #         else:
    #             print("刚刚好, 在这里出现了")
    #             return True
    #     else:
    #         return False
    #
    # lst = [1, 1, 1, 1, 2, 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 7, 8, 8, 9, 16, 32, 44, 55, 78, 89]
    # ret = func(2, lst)
    # print(ret)
    
    # 第二套方案
    def func(n, lst, left=0, right=None):
        if right == None:
            right = len(lst) - 1
        if left <= right:
            mid = (left + right) // 2
            if n > lst[mid]:
                left = mid + 1
            elif n < lst[mid]:
                right = mid - 1
            else:
                return True
            return func(n, lst, left, right)
        else:
            return False
    
    
    lst = [1, 1, 1, 1, 2, 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 7, 8, 8, 9, 16, 32, 44, 55, 78, 89]
    ret = func(98, lst)
    print(ret)
    

      

  • 相关阅读:
    springboot内置分页技术
    打印正三角,倒三角,实心棱形,空心棱形
    显示Pl/Sql Developer window list窗口
    Oracle 中使用正则表达式
    前端使用pdf.js预览pdf文件,超级简单
    tomcat8踩坑:url包含|等特殊字符报错400的问题
    使用 Itext 生成PDF字节数组(文件流不落地)
    使用 Itext 生成PDF
    回车提交事件
    python爬虫之re正则表达式库
  • 原文地址:https://www.cnblogs.com/konghui/p/9683049.html
Copyright © 2011-2022 走看看