zoukankan      html  css  js  c++  java
  • python013

    本节主要内容: 1. lamda匿名函数 
    2. sorted()
           3. filter()
           4. map()
    5. 递归函数
    ⼀. lamda匿名函数 为了解决⼀些简单的需求而设计的⼀句话函数
    def func(n):
        return n**n
    print(func(10))
    f=lambda n: n**n
    print(f(10))
    
    
    1.函数的参数可以有多个.多个参数之间用逗号隔开 
    2.匿名函数不管多复杂.只能写一行,且逻辑结束后直接返回数据
    3.返回值和正常的函数一样,可以是任意数据类型 匿名函数不一定没有名字.这里lambda表示的是匿名函数.不需要用def来声明,一句话就可以声明出一个函数
    语法: 函数名=lambda 参数:返回值 注意:前面的变量就是一个函数名.说他是匿名原因使我们通过__name__查看的时候是没有名字的. 统一都叫lambda.在调用的时候没有什么特别之处.像正常的函数调用即可.
    
    
    二.sorted() 排序函数. 
    语法:sorted(Iterable,key=None,reverse=False)
    iterable:可迭代对象. key:排序规则(排序函数),在sorted内部会将可迭代对象中的每一个元素传递给这个函数的参数.根据函数运算的结果进行排序 reverse:是否是倒叙.True:倒叙,False:正序
    lst=[1,5,3,4,6]
    lst2=sorted(lst)
    print(lst)   #原列表不会改变
    print(lst2)  #返回的新列表是经过排序的
    dic={1:'A',3:'C',2:'B'}
    print(sorted(dic))  #如果是字典,则返回返回是排序过的key
    
    
    
    和函数组合使用 根据字符串长度进行排序 
    lst=["麻花藤","冈本次郎","中央情报局","狐仙"] 计算字符串长度
    和lambda组合使用
    lst=["麻花藤","冈本次郎","中央情报局","狐仙"]  #计算字符串长度
    def func(s):
        return len(s)
    print(sorted(lst,key=lambda s: len(s)))
    
    按照学生年龄对学生信息进行排序
    lst = [{"id": 1, "name": 'alex', "age": 18},
        {"id": 2, "name": 'wusir', "age": 16},
        {"id": 3, "name": 'taibai', "age": 17}]
    print(sorted(lst, key=lambda e: e['age']))
    三.filter() 筛选函数 语法:filter(function.iterable) 
    function:用来筛选的函数.在file中会自动的吧iterable中的元素传递给function.然后根据function返回的True或者False来判断是否保留此项数据. iterable:可迭代对象
    
    
    lst=[1,2,3,4,5,6,7]
    ll=filter(lambda x: x%2==0,lst)
    print(ll)
    print(list(ll))
    
    
    四. map() 映射函数
    语法: map(function,iterable)
    可以对可迭代对象中的每⼀个元素进⾏映射. 分别取执⾏ function 计算列表中每个元素的平⽅ ,返回新列表
    lst = [1,2,3,4,5,6,7,8,9,0,23,23,4,52,35,234,234,234,234,234,23,4]
    it = map(lambda i: i * i, lst) # 把可迭代对象中的每一个元素传递给前面的函数进行处理. 处理的结果会返回成迭代器
    print(list(it))
    
    
    五. 递归 在函数中调⽤函数本⾝. 就是递归,在python中递归的深度最⼤到998.
    import sys
    sys.setrecursionlimit(10000)    # 可以调整递归深度. 但是不一定能跑到这里
    def func(count):
        print("我是谁,我在哪里"+str(count))
        func(count+1)
    func(1)
    
    while 1:
        a = 10
        print("哈哈")
    递归的应⽤: 我们可以使⽤递归来遍历各种树形结构,比如我们的⽂件夹系统.可以使用递归来遍历该⽂件夹中的所有文件  遍历树形结构 
    import  os
    filePath = "d:sylarpython_workspace"
    
    def read(filePath, n):
        it = os.listdir(filePath)   # 打开文件夹
        for el in it:
            #  拿到路径
            fp = os.path.join(filePath, el) # 获取到绝对路径
            if os.path.isdir(fp):   # 判断是否是文件夹
                print("	"*n,el)
                read(fp, n+1)    # 又是文件夹. 继续读取内部的内容 递归入口
            else:
                print("	"*n,el)    # 递归出口
    
    read(filePath, 0)
    
    
    六. ⼆分查找
    ⼆分查找.每次能够排除掉⼀半的数据.查找的效率非常⾼.但是局限性比较⼤.必须是有序序列才可以使⽤⼆分查找 要求: 查找的序列必须是有序序列.
    1)二分法,非递归版
    lst = [11,22,33,44,55,66,77,88,99,123,234,345,456,567,678,789,1111]
    n = 567
    left = 0
    right = len(lst) - 1
    count = 1
    while left <= right:
        middle = (left + right) // 2
        if n > lst[middle]:
            left = middle + 1
        elif n < lst[middle]:
            right = middle - 1
        else:
            print(count)
            print("存在")
            print(middle)
            break
        count = count + 1
    else:
        print("不存在")
    2)普通递归版
    
    
    lst = [11,22,33,44,55,66,77,88,99,123,234,345,456,567,678,789,1111]
    
    def binary_search(left, right, n):
        middle = (left + right)//2
        if left > right:
            return -1
        if n > lst[middle]:
            left = middle + 1
        elif n < lst[middle]:
            right = middle - 1
        else:
            return middle
        return binary_search(left, right, n)
    print(binary_search(0, len(lst)-1, 65) )
    
    
    3)另类二分法,很难计算位置.
    lst = [11,22,33,44,55,66,77,88,99,123,234,345,456,567,678,789,1111]
    
    def binary_search(lst, n):
        left = 0
        right = len(lst) - 1
        middle = (left + right) // 2
        if right <= 0:
            print("没找到")
            return
        if n > lst[middle]:
            lst = lst[middle+1:]
        elif n < lst[middle]:
            lst = lst[:middle]
        else:
            print("找到了")
            return
        binary_search(lst, n)
    binary_search(lst, 65)
    
    
    
    
    
    
     
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
  • 相关阅读:
    ORACLE-游标数
    Hibernate-原生SQL查询
    超链接无效
    首页统计脚本
    About_datebase
    PHP的学习--cookie和session--来自copy_02
    终于懂浏览器里面的cookies和session了
    About-PHP-02
    php链接数据库
    PHP 操作MySQL———来自copy
  • 原文地址:https://www.cnblogs.com/Li-Kai-168/p/9683081.html
Copyright © 2011-2022 走看看