測試環境為 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 ]
- map
- 範例 : 透過 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 ].
沒有解決問題,試試搜尋本站其他內容