【python 筆記】高階函數 map、reduce、filter

        高階函數是在Python中一個非常有用的功能函數,所謂高階函數就是一個函數可以用來接收另一個函數作爲參數,這樣的函數叫做高階函數。常用的python內置高階函數爲:map、reduce、filter 這三個(個人用得比較多的也就這三個),使用高階函數可以極大的提升代碼可讀性,簡化代碼結構。

map

        map函數接收的是兩個參數,一個函數,一個序列,其功能是將序列中的值處理再依次返回至列表內。返回值是一個map類型的可迭代對象,不能直接通過print進行打印輸出,可以通過list、tuple轉化成列表或者元組,一般情況下使用map就是進行一種運算的轉換,沒必要轉成list。

       map中可以傳入一個匿名函數(這種用法比較多)

li = [1, -2, 3]
# 對li中的每一個元素做求平方計算
list(map(lambda x: x**2, li))

 

        也可以傳入python中的內置函數

list(map(abs, li))

reduce

        reduce函數也是一個參數爲函數,一個爲可迭代對象的高階函數,其返回值爲一個值而不是迭代器對象,故其常用與疊加、疊乘等。reduce()傳入的函數必須接收兩個參數,reduce()對list的每個元素反覆調用函數function, 並返回最終結果值。

from functools import reduce
# reduce不是python中的內置函數,需要從functools中導入
reduce(lambda x, y: x*y, li) # 1*(-2)*3

reduce(lambda x, y: x**y, li) # 1**(-2)**3

filter

        filter函數也是接收一個 function 和一個序列的高階函數,主要功能是過濾。這個function 的作用是對list的每個元素進行判斷,返回True或False,filter()根據判斷結果自動過濾掉不符合條件的元素,返回由符合條件元素組成的可迭代對象。與map類似,filter返回的是一個filter對象。

# 篩選出大於0的元素
filter(lambda x: x>0, li)
# 查看filter返回值的類型
type(filter(lambda x: x>0, li))
# 結果轉成列表
list(filter(lambda x: x>0, li))

 總結:

  • map是使用傳入的函數,對序列中的每一個元素進行某種操作
  • reduce是反覆調用傳入的函數,最終返回一個結果,更多的是用來進行計算或者字符串拼接
  • filter則是一種過濾方式,通過傳入的函數,對序列中的每一個元素進行過濾,剔除不符合過濾條件的元素
  • 這三種方法的介紹大概也就這些,如果有學到數據分析,pandas中對DataFrame、Series的操作經常會用到這三種方法,使用方法大體上和上面差不多,只有一些細微的差別,詳情可以查看pandas官方文檔。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章