![](../../img/interpret.jpg)
Python 簡易手冊
單元 43 - 綜合運算
有個簡便的方式建立串列 (list) 、字典 (dictionary) 及集合 (set) ,就是在字面常數 (literal) 裡面直接用關鍵字 (keyword) for 建立串列元素 (element) ,這叫做綜合運算 (comprehension) ,下面先以以串列為例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | # 單一變數 a = [x for x in range(0, 20, 2)] print(a) # 運算式 b = [x * 2 for x in range(10)] print(b) # 取兩個值 c = [(x, y) for x in range(2) for y in range(2)] print(c) # 依條件取值 d = [(x, y) for x in range(5) for y in range(5) if x == y] print(d) # 檔名: list_demo8.py # 說明: 《Python簡易手冊》的範例 # 網址: http://kaiching.org # 作者: Kaiching Chang # 時間: 2024 年 3 月 |
單元 39 - 串列介紹如何定義串列,單元 23 - for 陳述介紹 for 的使用方式。
第 2 行,串列的字面常數中先設定一個變數,這裡取名 x , x 會是產生串列的元素,後面接關鍵字 for ,這是產生 x 的方式,然後用關鍵字 in 及內建函數 (built-in function) range() 產生數列
1 2 3 | # 單一變數 a = [x for x in range(0, 20, 2)] print(a) |
以上程式碼是說, for-in 在 range() 取得的 x 值,就會自動變成串列中的元素 x 。
單元 38 - 序對與 Range介紹 range() 的用法。
第 6 行是在 for 之前的 x 加上運算式 (expression) ,從 range() 取得值之後還會乘以 2 ,這是說取值之後可以再進行處理
5 6 7 | # 運算式 b = [x * 2 for x in range(10)] print(b) |
第 10 行是取兩個值,也就是兩個變數 x 與 y ,然後兩個 for
9 10 11 12 | # 取兩個值 c = [(x, y) for x in range(2) for y in range(2)] print(c) |
for 的最後可以再加上 if 作為取值的條件 (condition) ,例如第 17 行
14 15 16 17 18 | # 依條件取值 d = [(x, y) for x in range(5) for y in range(5) if x == y] print(d) |
這在 x 與 y 相同的情況下才會放入串列中,此例執行結果如下
> python list_demo8.py |
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18] [0, 2, 4, 6, 8, 10, 12, 14, 16, 18] [(0, 0), (0, 1), (1, 0), (1, 1)] [(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)] |
> |
以下為字典使用綜合運算的例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # 依 key 取得 value a = {x: x**2 for x in (1, 2, 3)} print(a) # 處理另一個字典 b = {"a": 2, "b": 7} c = {x: y*2 for (x, y) in b.items()} print(c) # 檔名: dictionary_demo4.py # 說明: 《Python簡易手冊》的範例 # 網址: http://kaiching.org # 作者: Kaiching Chang # 時間: 2024 年 3 月 |
單元 41 - 字典介紹如何定義字典。
第 2 行是直接用序對來取值, for 之前就是 key:value 的字典元素,最外圍是字典的字面常數大括弧
1 2 3 | # 依 key 取得 value a = {x: x**2 for x in (1, 2, 3)} print(a) |
字典的綜合運算另一個常用的是處理另一個字典的元素,例如第 7 行
5 6 7 8 | # 處理另一個字典 b = {"a": 2, "b": 7} c = {x: y*2 for (x, y) in b.items()} print(c) |
字典的 items() 方法回傳 key, value 的序列,所以這裡 x 會是 key , y 則是 value 。此例執行結果如下
> python dictionary_demo4.py |
{1: 1, 2: 4, 3: 9} {'a': 4, 'b': 14} |
> |
以下為集合使用綜合運算的例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | # 設定字串 s = 'babyfaced' # 由字串設定集合 a = {x for x in s} print(a) # 加入指定條件設定集合 b = {x for x in s if x not in 'aeiou'} print(b) # 檔名: set_demo4.py # 說明: 《Python簡易手冊》的範例 # 網址: http://kaiching.org # 作者: Kaiching Chang # 時間: 2024 年 3 月 |
單元 42 - 集合介紹如何定義集合。
第 5 行是利用第 2 行定義的字串 (string) 設定集合元素
4 5 6 | # 由字串設定集合 a = {x for x in s} print(a) |
單元 33 - 字串介紹如何定義字串。
第 9 行加入條件,限定非子音字母
8 9 10 | # 加入指定條件設定集合 b = {x for x in s if x not in 'aeiou'} print(b) |
執行結果如下
> python set_demo4.py |
{'e', 'f', 'b', 'c', 'a', 'y', 'd'} {'f', 'b', 'c', 'y', 'd'} |
> |
參考資料
![](../../img/pydoing.gif)