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 行,串列的字面常數中先設定一個變數,這裡取名 xx 會是產生串列的元素,後面接關鍵字 for ,這是產生 x 的方式,然後用關鍵字 in 及內建函數 (built-in function) range() 產生數列

 1
 2
 3
# 單一變數
a = [x for x in range(0, 20, 2)]
print(a)

以上程式碼是說, for-inrange() 取得的 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 行是取兩個值,也就是兩個變數 xy ,然後兩個 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)

這在 xy 相同的情況下才會放入串列中,此例執行結果如下

> 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 會是 keyy 則是 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'}
>

參考資料

上一頁 單元 42 - 集合
回 Python 簡易手冊 首頁
下一頁 單元 44 - 函數與 return 陳述
回 Python 教材首頁
回程式語言教材首頁