day13 内置函数二 递归,匿名函数,二分法

1.匿名函数
   1.语法 lambda 参数:返回值
   2.参数可以有多个,用逗号隔开
   3.只能写一行,执行结束后直接返回值
   4返回值和正常函数一样,可以是任意值
   5.列:
   f=lambda n:n**n   #传入一个数n,返回她的n次方
   print(f(10))   
2.sorted 排序函数
   1.语法:
     sorted(iteble,key=NONE,reverse=FALSE)
     1.iteble 可迭代对象
     2.key 排序函数 sorted内部把可迭代对象的每一个元素传给函数,
       根据函数的运算规则进行排序
     3.是否倒叙 TRUE:倒叙 FALSE :正序
   2.列:
     1.对字典进行排序,返回的是key
      dic = {1:'A', 3:'C', 2:'B'}
      print(sorted(dic)) 
      [1, 2, 3]
     2.列表
      lst = [1,5,3,4,6]
      lst2 = sorted(lst)
      print(lst)    原列表不会改变
      print(lst2)   新列表是经过排序的
     3.和函数联用
      lst = ["麻花藤", "冈本次郎", "中央情报局", "狐仙"]
      print(sorted(lst,lambda s:len(s)) 根据字符串长度进行排序
     4.
     lst = [{"id":1, "name":'alex', "age":18},
     {"id":2, "name":'wusir', "age":16},
     {"id":3, "name":'taibai', "age":17}]
     print(sorted(lst,lambda s:s["age"])   根据年龄排序字典
3.filter 筛选函数
     1.语法
     filter(function,iterble)
     用来筛选的函数,filter会自动把可迭代对象的元素传给
     function,然后根据function返回的TRUE 或者FALSE来
     判断是否保留此项数据
     2.列
     lst = [1,2,3,4,5,6,7]
     ll=print(lambda i:i%2==0,lst)#筛选出所有偶数
     print(ll)                    #迭代器
     print(list(ll))              #取值[2, 4, 6]
     3.
     lst = [{"id":1, "name":'alex', "age":18},
     {"id":2, "name":'wusir', "age":16},
     {"id":3, "name":'taibai', "age":17}]
     fl = filter(lambda e: e['age'] > 16, lst) # 筛选年龄⼤于16的数据
     print(list(fl))
4.map 映射函数
    1.语法
    map(function,iteable)
    2.求平方
    print(list(map(lambda x:x*x*x,[1,2,3,4,5])))
    3.映射
    lis1=[1,3,5,7,9]    
    lis2=[2,4,6,8,10]
    map(lambda x,y:x+y,lis1,lis2)
    注: 1. 如果lis不等长,就是按短的截取
        2.如果函数不存在,就一一对应打包成元组
5.递归
    1.定义:在函数中调用函数本身就是递归
    2.语法
     def func()
         print("递归")
         func()
     func()
    3.应用  遍历文件夹的所有文件
    import os
    def read(filepath,n)
        list=os.listdir(filepath)         #打开一个文件,获取里面所有的内容,返回列表
        for fi in list:                          #遍历获得的名字(包含文件名和文件夹名)
            file_real_path=os.path.join(path,fi) #获得的名字加上路径等于绝对路径
            if os.path.isdir(file_real_path)     #判断在绝对路径下是否文件夹
                #递归的入口
                print("\t"*n,fi)                        #打印
                read(file_real_path)             #是文件夹继续调用函数
            else:
                print("\t"*n,fi)                        #不是文件夹就直接输出
    read("../py",0)
6.二分法
    1.优点:查找快,效率高
    2.缺点:局限性大,必须是有序序列
    3.列
    lst = [22, 33, 44, 55, 66, 77, 88, 99, 101, 238, 345, 456, 567, 678, 789]
    num=int(input("请输入要查找的数字"))
    left=0                    #确定左边界,其实是索引的起始
    right=len(lst)-1          #确定右边界,其实是索引的结束
    while left<=right:
        mid=(left+right)//2   #整除2 ,取整
        if num>lst[mid]:
            left=mid+1
        elif num<lst[mid]:
            right=mid-1
        else:
            print("找到了")
            break
else:
    print("没找到")

猜你喜欢

转载自www.cnblogs.com/tjp40922/p/9911550.html