1. 程式人生 > >day13 內建函式二 遞迴,匿名函式,二分法

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("沒找到")