zoukankan      html  css  js  c++  java
  • 匿名函数

    一;lambda匿名函数

      lambda表示的是匿名函数,不需要def来表明,一句话就可以声明出一个函数

    计算n 的n次方
    def func(n):
        return n**n
    print(func(10))
    
    
    f = lamda n:n*n
    print(f(10))

    语法:

    函数名 = lambda 参数:返回值

    注意:

      1;匿名的函数可以有多个,多个参数之间用逗号隔开

      2;匿名函数不管多复杂,只能写一行,逻辑结束后直接返回数据

      3;返回值和正常函数一样,可以是任何数据类型

    二:sorted()  排序函数

    语法:

    sorted(iterable,key = None,reverse = False)

    Iterable:可迭代函数

    key:排序规则(排序函数),在sorted内部将可迭代对象 的每一个元素传递给这个函数,根据函数运行的结果进行排序

    reverse:  True 倒叙,False 正序

    lst = [1,3,5,7,3,2,4]
    lst2 = sorted(lst)
    print(lst)   #原列表不会改变
    print(lst2)   #返回新列表是经过排序的
    
    
    dic = {1:'A',3:'C',2:'B'}
    print(sorted(dic))   
    #字典,返回的是排序后的key

    和函数组合使用

    lst = ["麻花藤","诸葛孔明","欧阳娜娜","中央情报局","狐仙"]
    def func(s):
        return len(s)
    
    print(sorted(lst,key = func))

    和lambda组合使用

    lst = ["麻花藤", "诸葛孔明", "欧阳娜娜", "中央情报局", "狐仙"]
    def func(s):
        return len(s)
    print(sorted(lst,key=lambda s:len(s)))
    
    lst = [{"id":1,"name":'alex',"age":30},
           {"id":2,"name":'wusir',"age":28},
           {"id":3,"name":'taibai',"age":31},
           {"id":4,"name":'yinwang',"age":38}]
    #按年龄排序
    print(sorted(lst,key=lambda e:e['age']))

    三:filter()   筛选函数

    语法:

    filter(function,iterable)

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

    Iterable:可迭代对象

    lst = [1,2,3,4,5,6,7,8,9,10]
    ll = filter(lambda i :i%2==0,lst)        #筛选所有的偶数
    print(ll)            #<filter object at 0x00641550>
    print(list(ll))
    
    lst = [{"id":1,"name":'alex',"age":28},
           {"id":2,"name":'wusir',"age":30},
           {"id":3,"name":'taibai',"age":26},
           {"id":4,"name":'yinwang',"age":38}]
    #筛选年龄大于28的数据
    f1 = filter(lambda e:e["age"]>28,lst)
    print(list(f1))

    四:map()   映射函数

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

    计算列表中每个元素的平方,返回新列表

    def func(e):
        return e*e
    
    mp = map(func,[1,2,3,4,5,6])
    print(mp)
    print(list(mp))

    改写成lambda

    print(list(map(lambda x:x*x,[1,2,3,4,5,6])))

    计算两个列表相同位置的数据的和

    lst = [1,2,3,4,5]
    lst1 = [6,7,8,9,4]
    print(list(map(lambda x,y:x+y, lst,lst1)))

    五,递归

    在函数中调用函数本身就是递归

    def func():
        print('我是谁')
        func()
    func()

    在python中递归的深度最大到1000,(一般都不能够取到1000)

    def foo(n):
        print(n)
        n = n + 1
        foo(n)
    foo(1)

    递归的应用:

      我们可以使用递归来遍历各种树形结构,比如我们的文件夹:

    import os
    def read(filepath, n):
        files = os.listdir(filepath) # 获取到当前⽂文件夹中的所有⽂文件
        for fi in files: # 遍历⽂文件夹中的⽂文件, 这⾥里里获取的只是本层⽂文件名
            fi_d = os.path.join(filepath,fi) # 加⼊入⽂文件夹 获取到⽂文件夹+⽂文件
            if os.path.isdir(fi_d): # 如果该路路径下的⽂文件是⽂文件夹
                print("	"*n, fi)
                read(fi_d, n+1) # 继续进⾏行行相同的操作
            else:
                print("	"*n, fi) # 递归出⼝口. 最终在这⾥里里隐含着return
    #递归遍历⽬目录下所有⽂文件
    read('F:/wangjun', 0)

    六;二分查找

    二分查找每次能够排除一半的数据,查找效率非常高,但局限性比较大,必须是有序序列猜可以使用:

    lst = [22, 33, 44, 55, 66, 77, 88, 99, 101, 238, 345, 456, 567, 678, 789]
    n = 567
    left = 0
    right = len(lst) - 1
    count = 1
    while left <= right:
        middle = (left + right) // 2
        if n < lst[middle]:
            right = middle - 1
        elif n > lst[middle]:
            left = middle + 1
        else:
            print(count)
            print(middle)
            break
        count = count + 1
    else:
        print("不不存在")               

  • 相关阅读:
    洛谷p1017 进制转换(2000noip提高组)
    Personal Training of RDC
    XVIII Open Cup named after E.V. Pankratiev. Grand Prix of Eurasia
    XVIII Open Cup named after E.V. Pankratiev. Grand Prix of Peterhof.
    Asia Hong Kong Regional Contest 2019
    XVIII Open Cup named after E.V. Pankratiev. Grand Prix of Siberia
    XVIII Open Cup named after E.V. Pankratiev. Ukrainian Grand Prix.
    XVIII Open Cup named after E.V. Pankratiev. GP of SPb
    卜题仓库
    2014 ACM-ICPC Vietnam National First Round
  • 原文地址:https://www.cnblogs.com/wangjun187197/p/9484270.html
Copyright © 2011-2022 走看看