Python – List Comprehension

Loading

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

參考文章 – https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions

List Comprehension 語法可以依據需求快速建立 list ,會使用到 lambda 匿名函式 請參考 – https://benjr.tw/104564

lambda 函式語法如下(可多個參數並且回傳值).

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

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

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

filter(lambda parameter: expression, iterable)

這樣 新的 list 是透過運算產生出來的,來看一下下面範例.

[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.
  • 範例 : 透過 map 創建一個 平方的 list
    >>> squares = list(map(lambda x: x**2, range(10)))
    >>> print(squares)
    [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
    

    上面範例等同以下 for in 的語法.可以搭配 if 條件運算式篩選特定的元素,

    newlist = [expression for item in iterable if condition]
    
    >>> squares = [x**2 for x in range(10)]
    >>> print(squares)
    [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
    

    說明:

    • map
      透過 lambda 匿名函式的方式來定義. 透過條件運算式計算出結果,其中的 iterable 為可疊代的物件(如 list 物件),語法如下:

      map(lambda parameter: expression, iterable)
      
    • x:
      輸入參數 (parameter) 這資料來源為 後面 iterable 參數,範例為 range(10) = [1,2,3,4,5,6,7,8,9]
    • x**2
      運算的 expression 並將新的資料儲存到新的 list 物件 squares.
    • range 型別的用法 – https://benjr.tw/104527
      其 Range 公式為:

      r[i] = start + step*i where i >= 0 and r[i] < stop.
      

      range(10) = [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ]

  • 範例 : 透過 filter 篩選特定的元素
    語法如下:

    >>> bigger5 = list(filter(lambda x: x > 5, range(10)))
    >>> print(bigger5)
    [6, 7, 8, 9]
    

    上面範例等同以下 for in 的語法.

    >>> bigger5 = [x for x in range(10) if x > 5]
    >>> print(bigger5)
    [6, 7, 8, 9]
    

    說明:
    輸入參數 x 的值來自於 range(10) 物件 [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ],並透過 filter 看值是否大於 5 [ 6 , 7 , 8 , 9 ].

沒有解決問題,試試搜尋本站其他內容

發佈留言

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

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