python中的map、filter、reduce函數(shù)

三個函數(shù)比較類似,都是應用于序列的內(nèi)置函數(shù)。常見的序列包括list、tuple、str。

map函數(shù)

  • map函數(shù)會根據(jù)提供的函數(shù)對指定序列做映射。
  • map函數(shù)的定義:map(function, sequence[, sequence, ...]) -> list
    • 通過定義可以看到,這個函數(shù)的第一個參數(shù)是一個函數(shù),剩下的參數(shù)是一個或多個序列,返回值是一個集合。
      function可以理解為是一個一對一或多對一函數(shù),map的作用是以參數(shù)序列中的每一個元素調(diào)用function函數(shù),返回包含每次function函數(shù)返回值的list。

    • lambda 結(jié)合的例子

map(lambda x: x ** 2, [1, 2, 3, 4, 5])
返回結(jié)果為:
[1, 4, 9, 16, 25]
    ```
  - **單參數(shù)例子**
    ```
>>> def add100(x):
...     return x+100
... 
>>> hh = [11,22,33]
>>> map(add100,hh)
[111, 122, 133]
  • ** list參數(shù)的例子**
>>> def abc(a, b, c):
...     return a*10000 + b*100 + c
... 
>>> list1 = [11,22,33]
>>> list2 = [44,55,66]
>>> list3 = [77,88,99]
>>> map(abc,list1,list2,list3)
[114477, 225588, 336699]
  • ** function為None的例子**
>>> list1 = [11,22,33]
>>> map(None,list1)
[11, 22, 33]
>>> list1 = [11,22,33]
>>> list2 = [44,55,66]
>>> list3 = [77,88,99]
>>> map(None,list1,list2,list3)
[(11, 44, 77), (22, 55, 88), (33, 66, 99)]

filter函數(shù)

  • filter函數(shù)會對指定序列執(zhí)行過濾操作。
  • filter函數(shù)的定義:filter(function or None, sequence) -> list, tuple, or string
    • function是一個謂詞函數(shù),接受一個參數(shù),返回布爾值True或False。

    • filter函數(shù)會對序列參數(shù)sequence中的每個元素調(diào)用function函數(shù),最后返回的結(jié)果包含調(diào)用結(jié)果為True的元素。返回值的類型和參數(shù)sequence的類型相同

    • 返回序列中的所有奇數(shù)

def is_even(x):
      return x & 1 != 0
filter(is_even, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
返回結(jié)果為:
[1, 3, 5, 7, 9]
  • 如果function參數(shù)為None,返回結(jié)果和sequence參數(shù)相同。

reduce函數(shù)

  • reduce函數(shù),reduce函數(shù)會對參數(shù)序列中元素進行累積。
  • py3以后使用,必須導入 from functools import reduce
  • reduce函數(shù)的定義:reduce(function, sequence[, initial]) -> value
    • function參數(shù)是一個有兩個參數(shù)的函數(shù),reduce依次從sequence中取一個元素,和上一次調(diào)用function的結(jié)果做參數(shù)再次調(diào)用function。
      第一次調(diào)用function時,如果提供initial參數(shù),會以sequence中的第一個元素和initial作為參數(shù)調(diào)用function,否則會以序列sequence中的前兩個元素做參數(shù)調(diào)用function。

    • 累加例子

def myadd(x,y):  
        return x+y  
    sum=reduce(myadd,(1,2,3,4,5,6,7))  
    print(sum)  
    #結(jié)果就是輸出1+2+3+4+5+6+7的結(jié)果即28
  • lambda 結(jié)合的例子
reduce(lambda x, y: x + y, [2, 3, 4, 5, 6], 1)
結(jié)果為21(  (((((1+2)+3)+4)+5)+6)  )
reduce(lambda x, y: x + y, [2, 3, 4, 5, 6])
結(jié)果為20
  • 注意function函數(shù)不能為None。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容