zoukankan      html  css  js  c++  java
  • lambda匿名函数sorted排序函数filter过滤函数map映射函数

    lambda函数:表示匿名函数,不需要def来声明,一句话就能搞定。

    语法:函数名=lamda 参数:返回值

    求10的10次方
    f=lambda n:n**n
    print(f(10))

    注意:

    函数名可以是多个,用逗号隔开

    匿名函数只能写一行,当逻辑结束之后就直接返回数据。

    返回值和正常函数一样,可以是任意数据

    返回较大的那个数
    user=lambda x,y:max(x,y)
    print(user(2,1))
    
    
    多个数字,返回最大值
    user = lambda *args:max(args)

    sorted()函数:排序函数

    语法:sorte(lterable,key =none ,reverse=False)

    lterable:可迭代对象

    key:sorted函数内部会把可迭代对象中的每一个元素拿出来交给后面的key
     后面的key计算出一个数字. 作为当前这个元素的权重, 整个函数根据权重进行排序

    reverse:是否倒序,True,倒序,False正序

    lst = [
        {'name':"汪峰","age":48},
        {"name":"章子怡",'age':38},
        {"name":"alex","age":39},
        {"name":"wusir","age":32},
        {"name":"赵一宁","age":28}
        ]
    li=sorted(lst,key=lambda el :len(el["name "]),reverse=True)
    print(li)

    filter()筛选函数

    语法:filter(function,lterable)

    function:用来筛选函数,在filter中,把iterable中的元素传递给function,然后根据function返回的  True或者False来判断是否保留此项数据

    iterable:可迭代对对象

    
    
    lst = ["张无忌", "张铁林", "赵一宁", "石可心","马大帅"]
    f = filter(lambda el:el[0]!="张",lst)
    print('_iter_'in dir(f))
    for el in f :
    print(el)
    筛选掉姓张的人
    lst = [
        {"name":"汪峰", "score":48},
        {"name":"章子怡", "score":39},
        {"name":"赵一宁","score":97},
        {"name":"石可心","score":90}
    ]
    f = filter(lambda el:el["score"] <60,lst)
    print(list(f ) )
    
    
    筛选掉60分以下的人

    map()

    映射函数

    语法:map(function,iterable)对可迭代对象的每一个元素进行映射,分别取执行function

    print(list(map(lambda x:x*x,[1,2,3,4])))
    利用映射函数来求x的x 次幂
    算两个相同位置的列表的和
    lst=[1,2,3,4,5]
    lst1=[2,4,6,8,10]
    print(list(map(lambda x, y: x+y,lst,lst1)))

    递归

    在函数中调用函数本身,就是递归,相当于贪吃蛇

    在python中,递归最深是1000

    我们可以利用递归来遍历各种树形结构

    
    
    遍历一个文件夹

    import
    os#引入模块 def func(wjm): wj=os.listdir(wjm)#打开要打开的文件夹 for el in wj :#拿到这个文件夹的每一个文件 n_f=os.path.join(wjm,el )#获取到路径 if os.path .isdir(n_f):#判断是否是文件夹 print(el)#是文件夹打印问价名 func(n_f) else: print(el )#不是文件,普通文件 func("f:/上课作业视频")

    二分法查找

    核心:去头去尾取中间

    条件:必须是有序的

    lst = [22, 33, 44, 55, 66, 77, 88, 99, 101 , 238 , 345 , 456 , 567 , 678 , 789]
    
    n=888
    zb=0
    yb=len(lst)-1
    while zb<=yb:
        zj=(zb+yb)//2
        if lst[zj]>n:
            yb=zj-1
        if lst[zj]<n:
            zb=zj +1
        if lst[zj]==n:
            print("找到了")
            break
    else:
        print("没找到")
    用递归来完成二分法
    def func(n,zb,yb):
        if zb<=yb:
            zj=(zb+yb)//2
            if lst[zj]>n:
                yb=n-1
                return (n,zb,yb)
            if lst[zj]<n:
                zb=zb+1
                return (n,zb,yb)
            elif n==lst[zj]:
                print("找到了")
                return zj
        else:
            print("没有这个数")
    ret=func(99,0,len(lst)-1)
    print(ret)
  • 相关阅读:
    nginx公网IP无法访问浏览器
    Internet接入方式
    Adobe Photoshop Lightroom 5.3和序列号
    getopt
    printf
    scanf
    cycling -avoid the vicious cycle
    ACE handle_timeout 事件重入
    Linux查看程序端口占用
    The GNU C Library
  • 原文地址:https://www.cnblogs.com/wqzn/p/9482752.html
Copyright © 2011-2022 走看看