Python中的Map、Reduce和Filter函數語言程式設計

banq發表於2021-09-13

構成函數語言程式設計正規化核心的三個關鍵函式是 Map、Filter 和 Reduce。
 

Map
在 map 函式中,您作為引數傳遞的函式將應用於可迭代物件。
如果您熟悉列表推導式,Map 函式也有類似的效果。當我們需要同時在各種元素上對映或實現功能時,我們會使用它。
map 函式採用以下引數:
map(function, iterable object)

  • 函式function:可以是使用者定義的函式或 lambda 函式。Lambda 是一個匿名函式,可以接受多個引數。它們只能有一種表達方式。
  • 可迭代物件 iterable object字串、元組、列表、集合、字典等物件

假設我們有一個名為 FirstName 的列表,其中包含所有員工的名字,我們還有另一個列表,其中包含所有員工的姓氏。所需的輸出是顯示全名。您可以使用 for 迴圈來實現這一點,但這需要多行程式碼並且很乏味。Map 函式允許我們用一行程式碼來實現這一點。

first_name = ["Keith", "Elizabeth","Alex","William"] 
last_name = ["Philip","Brown","Smith","Oliver"]
name = list(map(lambda x, y:x+ " "+y, first_name, last_name))


再舉一個例子,我們想找到一個所有數字的立方體。我們也可以透過傳遞一個函式作為引數來實現。
讓我們首先建立一個函式,它返回一個輸入的立方體

def cube(x):
    return x**3
arr_num = [1,3,5,7,9]
cube_values = list(map(cube, arr_num))
print(cube_values)

 

Filter
'Filter' 的行為類似於 map 函式,但還需要該函式查詢條件,該條件是布林值。然後過濾器從可迭代物件中返回滿足條件的元素。本質上,它過濾掉不滿足布林邏輯的物件。
讓我們看看如何使用過濾器函式來過濾名字以“h”結尾的員工

names = list(filter(lambda x: ( x[-1]=='h'),first_name))
print(names)


 

Reduce
'Reduce' 對可迭代物件啟用成對操作。它使用傳遞函式中定義的每個操作的結果,以及每個連續元素。這會減少 pyton 將應用該函式的專案總數,直到只剩下一個最終值。
在我們檢視reduce函式的引數之前,需要注意的是reduce必須從python的functools庫中匯入
這是匯入的命令
from functools import reduce
我們有一個數字列表,我們想找到最大的數字。

arr_num = [110,569, 784, 377, 900, 126] 
large_num = reduce(lambda x, y: x if x>y else y, arr_num) 
print(largest_num)


原始碼

相關文章