• <tfoot id="ukgsw"><input id="ukgsw"></input></tfoot>
    
    • 久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
      分享

      Python匿名函數/排序函數/過濾函數/映射函數/遞歸/二分法

       印度阿三17 2020-03-09

      這篇文章主要介紹了Python匿名函數/排序函數/過濾函數/映射函數/遞歸/二分法 ,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
      一. lamda匿名函數
        為了解決一些簡單的需求而設計的一句話函數

      # 計算n的n次方
      def func(n):
       return n**n
      print(func(10))
      f = lambda n: n**n
      print(f(10))
      

      lambda表示的是匿名函數. 不需要用def來聲明, 一句話就可以聲明出一個函數

      語法:
          函數名 = lambda 參數: 返回值

      注意:

      1. 函數的參數可以有多個. 多個參數之間用逗號隔開
        2. 匿名函數不管多復雜. 只能寫一行, 且邏輯結束后直接返回數據
        3. 返回值和正常的函數一樣, 可以是任意數據類型

      匿名函數并不是說一定沒有名字. 這里前面的變量就是一個函數名. 說他是匿名原因是我們通過__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 = ["魯班七號", "程咬金", "安琪拉", "阿珂"]
      # 計算字符串長度
      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":'魯班', "age":28},
        {"id":2, "name":'安琪拉', "age":16},
        {"id":3, "name":'阿珂', "age":25}]
      # 按照年齡對信息進行排序
      print(sorted(lst, key=lambda e: e['age']))
      

      三. filter() 篩選函數

      語法: filter(function. Iterable)

      function: 用來篩選的函數. 在filter中會自動的把iterable中的元素傳遞給function. 然后根據function返回的True或者False來判斷是否保留此項數據

      1. map() 映射函數

      Iterable: 可迭代對象

      lst = [1,2,3,4,5,6,7]
      ll = filter(lambda x: x%2==0, lst) # 篩選所有的偶數
      print(ll)
      print(list(ll))
      lst = [{"id":1, "name":'魯班', "age":18},
        {"id":2, "name":'安琪拉', "age":16},
        {"id":3, "name":'阿珂', "age":17}]
      fl = filter(lambda e: e['age'] > 16, lst) # 篩選年齡大于16的數據
      print(list(fl))
      

      四. map() 映射函數

      語法: map(function, iterable) 可以對可迭代對象中的每一個元素進行映射. 分別取執行function

      計算列表中每個元素的平方,返回新列表

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

      改寫成lambda

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

      計算兩個列表中相同位置的數據的和

      # 計算兩個列表相同位置的數據的和
      lst1 = [1, 2, 3, 4, 5]
      lst2 = [2, 4, 6, 8, 10]
      print(list(map(lambda x, y: x y, lst1, lst2)))
      

      五. 遞歸

      在函數中調用函數本身,就是遞歸

        def func():
       print("我是遞歸")
       func()
      func()
      

      在python中遞歸的深度最大到998

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

      遞歸的應用:
        我們可以使用遞歸來遍歷各種樹形結構, 比如我們的文件夾系統. 可以使用遞歸來遍歷該文件夾中的所有文件

      import os
      def func(filepath,n):
       files = os.listdir(filepath) # 查案當前文件的目錄
       for file in files: # 獲取每一個文件名
        # 獲取文件路徑
        file_p = os.path.join(filepath,file)
        if os.path.isdir(file_p): # 判斷file是否是一個文件夾
         print("\t"*n,file)
         func(file_p,n 1)
        else:
         print("\t"*n,file)
      func("/Volumes/擴展盤/網站css",0)
      

      六. 二分查找

      二分查找. 每次能夠排除掉一半的數據. 查找的效率非常高. 但是局限性比較大. 必須是有序序列才可以使用二分查找

      要求: 查找的序列必須是有序序列.

        # 判斷n是否在lst中出現. 如果出現請返回n所在的位置
      lst = [22, 33, 44, 55, 66, 77, 88, 99, 101, 238, 345, 456, 567, 678, 789]
      # 非遞歸算法
      # 使用二分法可以提高效率 前提條件有序序列
      n = 88
      left = 0
      right = len(lst) - 1
       
      while left <= right: # 邊界,當右邊比左邊還小的時候退出循環
       mid = (left   right) // 2 # 這里必須是整除,應為索引沒有小數
       if lst[mid] > n:
        right = mid - 1
       if lst[mid] < n:
        left = mid   1
       if lst[mid] == n:
        print("找到這個數")
        break
      else:
       print("沒有這個數!")
      
      # 遞歸來完成二分法
      lst = [22, 33, 44, 55, 66, 77, 88, 99, 101, 238, 345, 456, 567, 678, 789]
      def func(n,left,right):
       if left <= right:
        mid = (left   right) // 2
        if n > lst[mid]:
         left = mid   1
         return func(n,left,right) # 遞歸,遞歸入口
        elif n < lst[mid]:
         right = mid - 1
         # 深坑,函數的返回值返回給調用者
         return func(n,left,right) # 遞歸
        elif lst[mid] == n:
         # print("找到了")
         return mid
       else:
        print("沒找到")
        return -1 # 避免返回None
       
      # 找66,左邊界0,右邊界len(lst) - 1
      ret = func(66,0,len(lst) - 1)
      print(ret)
      
      # 遞歸二分法另一種形式,但是無法實現位置計算
      lst = [22, 33, 44, 55, 66, 77, 88, 99, 101, 238, 345, 456, 567, 678, 789]
      def func(lst,target):
       left = 0
       right = len(lst) - 1
       if left > right:
        print("沒有這個數")
       middle = (left   right)//2
       if target < lst[middle]:
        return func(lst[:middle],target)
       elif target > lst[middle]:
        return func(lst[middle   1:],target)
       elif target == lst[middle]:
        print("找到這個數了")
      func(lst,101)
      

      核心: 掐頭去尾取中間. 一次砍一半
        兩種算法: 常規循環, 遞歸循環

      # 時間復雜度最低, 空間復雜度最低
      lst1 = [5,6,7,8]
       lst2 = [0,0,0,0,0,1,1,1,1]
       for el in lst1:
       lst2[el] = 1
       lst2[4] == 1 # o(1)
      

      寫到這里,給大家推薦一個資源很全的python學習聚集地,點擊進入,這里有資深程序員分享以前學習心得,學習筆記,還有一線企業的工作經驗,且給大家精心整理一份python零基礎到項目實戰的資料,每天給大家講解python最新的技術,前景,學習需要留言的小細節
      總結
      以上所述是小編給大家介紹的Python匿名函數/排序函數/過濾函數/映射函數/遞歸/二分法,希望對大家有所幫助

      來源:https://www./content-1-654401.html

        本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發現有害或侵權內容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發表

        請遵守用戶 評論公約

        類似文章 更多

        主站蜘蛛池模板: 高清有码国产一区二区| 美女被强奷到抽搐的动态图| 欧洲免费一区二区三区视频| 亚洲最大的熟女水蜜桃AV网站| 亚洲国产精品无码久久98| 亚洲日韩性欧美中文字幕| 色婷婷久久综合中文久久一本| AV激情亚洲男人的天堂| 国产精品日日摸夜夜添夜夜添2021| AV区无码字幕中文色| 老司机久久99久久精品播放免费| 两个人看的视频WWW在线高清| 国产精品自产拍在线观看中文| 国产小受被做到哭咬床单GV| 国产又粗又猛又黄又爽无遮挡| 成人网站网址导航| 少妇扒开毛茸茸的B自慰 | 国产精品普通话国语对白露脸| 亚洲色大成网站WWW尤物| 亚洲av成人无码精品电影在线| 欧美国产日韩在线三区| 午夜福利国产精品视频| 亚洲精品国产电影| 亚洲 制服 丝袜 无码| 影音先锋啪啪av资源网站| 亚洲精品午夜国产VA久久成人| 国产精品普通话国语对白露脸 | 久久99精品久久久久久9| 最新AV中文字幕无码专区| 中文字幕av一区二区| 亚洲熟妇少妇任你躁在线观看无码 | 久热综合在线亚洲精品| 久久久久香蕉国产线看观看伊| 国产成人亚洲精品无码电影不卡| 久久精品国产99国产精品澳门 | 狠狠综合久久AV一区二区| 影音先锋2020色资源网| 嘿咻嘿咻男女免费专区| 国产中文字幕在线精品| 妺妺窝人体色WWW在线一| 国产成人不卡无码免费视频|