• day 014 python 内置函数


    1. lamda匿名函数
    2. sorted()
    3. filter()
    4. map()
    5. 递归函数

    一 匿名函数(lambda)   函数名=  lambda 参数: 返回值

    简单算法 a+b

    常规算法 

    def func(a,b):
    #     return a+b
    # ret=func(1,2)
    # print(ret)

    lambda算法  

    f=lambda a,b: a+b
    print(f(2,3))

    又如:

    # 计算n的n次⽅方
    def func(n):
    return n**n
    print(func(10))


    f = lambda n: n**n
    print(f(10))

    需要注意:  

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

    二     sorted (排序函数)    sorted(iterable, key=func, reverse=True/False)

    语法:sorted(Iterable, key=None, reverse=False)    sorted(Iterable, key=None, reverse=False)      

    key: 排序规则(排序函数), 在sorted内部会将可迭代对象中的每一个元素传递给这个函
    数的参数. 根据函数运算的结果进行排序(把可迭代对象中的每一个元素拿出来, 放到func中运行. 返回一个数字. 根据数字进行排序)

    例子1

    和lambda 使用
    lst=['迪拉姆 ','十多个','所有的','撒','我的']
    def func(name):
    #     # return len(name) % 2
    # a=sorted(lst,key=lambda:len(name))
    # print(a)

    按以下年龄进行排序
    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']
    # # # l1=sorted(lst,key=func) 配合函数用
    print(l1)
    
    
    l2=sorted(lst,key=lambda a:a['age']) ## 配合lambda用
    print(l2)

    和函数使用

    # 根据字串长度进行排序
    lst = ["麻花藤", "冈本次郎", "中央情报局", "狐仙"]
    # 计算字符串串⻓长度
    def func(s):
    return len(s)
    print(sorted(lst, key=func))

     filter(筛选函数)

        语法:  filter(function. Iterable)           

    function: 用来筛选的函数. 在filter中会自动的把iterable中的元素传递给function. 然后
    根据function返回的True或者False来判断是否保留留此项数据  (把可迭代对象中的每一个元素拿出来, 放到func中运行.返回True/False. 根据返回的True和False来决定这个数据是否保留)

    Iterable: 可迭代对象

    和 函数和 lambda使用:

    lst=[11,22,15,26,56,19] def func(age): return age>18and age%2==0 f=filter(func,lst) # f=filter(lambda age:age>18 and age%2==0,lst) print(f) # # print("__iter__"in dir(f)) for i in f: print(i)

    筛选年龄大于17的例子:

    lst = [{"id": 1, "name": 'alex', "age": 18},
        {"id": 2, "name": 'wusir', "age": 16},
        {"id": 3, "name": 'taibai', "age": 17}]
    
    f=filter(lambda a:a['age']>=17,lst)
    # for i in f:
    #     print(i)
    print(list(f))

       map (映射函数)

    语法: map(function, iterable)

     可以对可迭代对象中的每一个元素进⾏行行映射. 分别取执行

    function     (把可迭代对象中的每一个元素拿出来, 放到func中运行.返回数据就是结果)

    计算列表中每个元素乘2的值
    lst=[1,2,5,6,9] # l1=[i**2 for i in lst] # print(l1) # f=map(lambda r:r*2,lst) #可以处理更复杂 # print(list(f))
    计算两个列表相同位置的数据的和
    # lst1 = [1, 2, 3, 4, 5]
    # lst2 = [2, 4, 6, 8, 10]
    #
    # print(list(map(lambda x, y: x + y , lst1, lst2)))

    五  递归(在函数中调⽤用函数本⾝身. 就是递归) 越画越小的圈

    ef func():
        print("我叫李嘉诚")
        func()  # 递归入口
    func() # 调用函数
    用递归实现1到100
    import sys
    sys.setrecursionlimit(5000)  #设置递归最大深度,一般不要改
    def func(n):
        print(n)
        func(n+1)
    func(1)     结果为3222 #d递归深度官网给的为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)
    #        if os.path.isdir(full_path): #判断这个路径是否是一个文件夹
    #            print("	"*ceng,file)
    #            func(full_path,ceng+1)
    #        else:
    #            print("	"*ceng,file)
    #    else:
    #        return
    #
    # func("E:上课打包",0)

    六   二分法查找: 

    前提: 有序. (必须是有序序列列.)

    核心思想:掐头去尾取中间

    例子

    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]
    # 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]
    lst1=sorted(lst)
    print(lst1)  #无序例子  先排序
     # 方法一
    n=int(input("请输入一个数:"))
    
    left=0
    right=len(lst1)-1
    while left<=right:
        mid=(left+right)//2  # 索引只能是整数 所以地板除
        if n>lst1[mid]:
            left=mid+1
        elif n<lst1[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)

  • 相关阅读:
    Flask 框架:运用Echarts绘制图形
    驱动开发:应用DeviceIoContro开发模板
    驱动开发:内核取应用层模块基地址
    驱动开发:通过PIPE管道与内核层通信
    Python 实现Tracert追踪TTL值
    ImGUI 1.87 绘制D3D外部菜单
    驱动开发:内核R3与R0内存映射拷贝
    驱动开发:通过ReadFile与内核层通信
    Websphere更新应用文件
    Python:如何只用十几行代码写一个程序?
  • 原文地址:https://www.cnblogs.com/systemsystem/p/9682768.html
Copyright © 2020-2023  润新知