Python – lambda & filter , map , reduce

Loading

測試環境為 CentOS 8 x86_64 (虛擬機)

參考文章 – https://medium.com/seaniap/python-lambda-%E5%87%BD%E5%BC%8F-7e86a56f1996 與 https://www.learncodewithmike.com/2019/12/python-lambda-functions.html

[root@localhost ~]# python3
Python 3.6.8 (default, Mar 25 2022, 11:15:52) 
[GCC 8.5.0 20210514 (Red Hat 8.5.0-10)] on linux
Type "help", "copyright", "credits" or "license" for more information.

lambda

一般是透過 def 的方式來定義涵式,如果是只有一行的函式可以使用 lambda 匿名函式的方式來定義.

  • 範例 1: lambda 匿名函式
    lambda 函式語法如下(可多個參數並且回傳值).

    func = lambda parameter_list: expression
    
    >>> square=lambda x: x ** 2
    >>> square(3)
    9
    

    說明:

    • x: 為輸入參數
    • x ** 2 (x=x*2) 計算結果並回傳
  • 範例 2: lambda 匿名函式 function expression
    function expression 語法如下

    (lambda parameter: expression)(argument)
    

    此語法用在 Lambda 函式定義之後,立即傳入參數並執行.

    >>> print((lambda x,y : x+y)(3,5))
    8
    
  • 範例 3: lambda 匿名函式,傳入多個參數.
    >>> add_number = lambda x,y : x+ y
    >>> add_number(3,5)
    8
    
  • 範例 4: lambda 匿名函式,搭配 if 條件判斷式.
    >>> abs_number = lambda x : x if x >= 0 else -x
    >>> abs_number(3)
    3
    >>> abs_number(-3)
    3
    

filter , map , reduce

lambda 匿名函式還可以搭配 filter , map , reduce 函式來使用.

需要多一個參數 iterable 為可疊代的物件(如 list 物件)當作資料的輸入 , 關於 iterable 請參考 – https://benjr.tw/104591

filter(lambda parameter: expression, iterable)
  • 範例 : filter() 函式
    透過條件運算式篩選特定的元素,其中的 iterable 為可疊代的物件(如 list 物件),語法如下:

    filter(lambda parameter: expression, iterable)
    

    輸入參數 x 的值來自於 nums (list 物件),並透過判斷式看值是否大於 25.

    >>> nums=[10 , 20 , 30 , 40 , 50]
    >>> result=filter(lambda x: x>25 , nums)
    >>> print(list(result))
    [30, 40, 50]
    
  • 範例 : map() 函式
    透過條件運算式計算出結果,其中的 iterable 為可疊代的物件(如 list 物件),語法如下:

    map(lambda parameter: expression, iterable)
    

    輸入參數 x 的值來自於 nums (list 物件),並透過計算值是否大於 25(True 為真, False 為否).

    >>> nums=[10 , 20 , 30 , 40 , 50]
    >>> result=map(lambda x: x>25 , nums)
    >>> print(list(result))
    [False, False, True, True, True]
    

    輸入參數 x 的值來自於 nums (list 物件),並透過運算式 (x*2) 加倍其值.

    >>> nums=[10 , 20 , 30 , 40 , 50]
    >>> result=map(lambda x: x*2 , nums)
    >>> print(list(result))
    [20, 40, 60, 80, 100]
    
  • 範例 : reduce() 函式
    可以將疊代物件中的前後兩個元素並透過運算式做運算,其結果再跟疊代物件中的下一個元素進行運算直到結束.

    reduce(lambda parameter1, parameter2: expression, iterable)
    

    輸入參數 x 的值來自於 nums (list 物件),並透過運算式累加其值.

    >>> nums=[10 , 20 , 30 , 40 , 50]
    >>> result=reduce(lambda x , y : x+y , nums)
    >>> print(result)
    150
    
沒有解決問題,試試搜尋本站其他內容

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料