lambda表達式和map(),reduce(),filter()的使用


lambda 表達式

lambda 表達式的語法格式如下:

   lambda [parameter_list] : 表達式

從上面的語法格式可以看出 lambda 表達式的幾個要點:

  • lambda 表達式必須使用 lambda 關鍵字定義。
  • 在 lambda 關鍵字之后、冒號左邊的是參數列表,可以沒有參數,也可以有多個參數。如果有多個參數,則需要用逗號隔開,冒號右邊是該 lambda 表達式的返回值。

實際上,lambda 表達式的本質就是匿名的、單行函數體的函數。因此,lambda 表達式可以寫成函數的形式。

例如,對於如下 lambda 表達式:

      lambda x , y:x + y

可改寫為如下函數形式:

def add(x, y):
    return x+ y

上面定義函數時使用了簡化語法:當函數體只有一行代碼時,可以直接把函數體的代碼放在與函數頭同一行。

總體來說,函數比 lambda 表達式的適應性更強,lambda 表達式只能創建簡單的函數對象(它只適合函數體為單行的情形)。但 lambda 表達式依然有如下兩個用途:

1.對於單行函數,使用 lambda 表達式可以省去定義函數的過程,讓代碼更加簡潔。

2.對於不需要多次復用的函數,使用 lambda 表達式可以在用完之后立即釋放,提高了性能。

 

map()函數

map() 函數的基本語法格式如下:

          map(function, iterable)

其中,function 參數表示要傳入一個函數,其可以是內置函數、自定義函數或者 lambda 匿名函數;iterable 表示一個或多個可迭代對象,可以是列表、字符串等

map() 函數的功能是對可迭代對象中的每個元素,都調用指定的函數,並返回一個 map 對象

注意,該函數返回的是一個 map 對象,不能直接輸出,可以通過 for 循環或者 list() 函數來顯示。

【例 1】還是對列表中的每個元素乘以 2。

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

結果為:     [2, 4, 6, 8, 10]


【例 2】map() 函數可傳入多個可迭代對象作為參數。

listDemo1 = [1, 2, 3, 4, 5]
listDemo2 = [3, 4, 5, 6, 7]
new_list = map(lambda x,y: x + y, listDemo1,listDemo2)
print(list(new_list))

結果為:     [4, 6, 8, 10, 12]

注意,由於 map() 函數是直接由用 C 語言寫的,運行時不需要通過 Python 解釋器間接調用,並且內部做了諸多優化,所以相比其他方法,此方法的運行效率最高。

filter()函數

filter()函數的基本語法格式如下:

       filter(function, iterable)

此格式中,funcition 參數表示要傳入一個函數,iterable 表示一個可迭代對象。

filter() 函數的功能是對 iterable 中的每個元素,都使用 function 函數判斷,並返回 True 或者 False,最后將返回 True 的元素組成一個新的可遍歷的集合

【例 3】返回一個列表中的所有偶數。

listDemo = [1, 2, 3, 4, 5]
new_list = filter(lambda x: x % 2 == 0, listDemo)
print(list(new_list))

   結果為:  [2, 4]


【例 4】filter() 函數可以接受多個可迭代對象。

listDemo = [1, 2, 3, 4, 5]
new_list = map(lambda x,y: x-y>0,[3,5,6],[1,5,8] )
print(list(new_list))

結果為:  [True, False, False]

 

reduce()函數

reduce() 函數通常用來對一個集合做一些累積操作,其基本語法格式為:

      reduce(function, iterable)

其中,function 規定必須是一個包含 2 個參數的函數;iterable 表示可迭代對象。

注意,由於 reduce() 函數在 Python 3.x 中已經被移除,放入了 functools 模塊,因此在使用該函數之前,需先導入 functools 模塊。

【例 5】計算某個列表元素的乘積。

import functools
listDemo = [1, 2, 3, 4, 5]
product = functools.reduce(lambda x, y: x * y, listDemo)
print(product)

結果為:  120

總結

通常來說,當對集合中的元素進行一些操作時,如果操作非常簡單,比如相加、累積這種,那么應該優先考慮使用 map()、filter()、reduce() 實現。另外,在數據量非常多的情況下(比如機器學習的應用),一般更傾向於函數式編程的表示,因為效率更高。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM