Python 生成式
串列生成式
- 你可以建立一個從整數1到5的串列,一次建立一個項目
1 2 3 4 5 6 7 8
| >>> number_list = [] >>> number_list.append(1) >>> number_list.append(2) >>> number_list.append(3) >>> number_list.append(4) >>> number_list.append(5) >>> number_list [1, 2, 3, 4, 5]
|
1 2 3 4 5 6
| >>> number_list = [] >>> for number in range(1, 6): number_list.append(number)
>>> number_list [1, 2, 3, 4, 5]
|
1 2 3
| >>> number_list = list(range(1, 6)) >>> number_list [1, 2, 3, 4, 5]
|
- 以上所有方法都是有效的Python程式,也都會產生相同的結果,但要建立較符合Python風格的方式,就是使用串列生成式,最簡單的串列生成式形式是:
[運算式 for 項目 in 可迭代項目]
1 2 3
| >>> number_list = [number for number in range(1, 6)] >>> number_list [1, 2, 3, 4, 5]
|
- 如上,第一個number變數來產生串列的值,將迴圈的結果放入number_list
- 第二個 number是 for迴圈的一部份,為了說明第一個number是個運算式,範例如下:
1 2 3
| >>> number_list = [number-1 for number in range(1, 6)] >>> number_list [0, 1, 2, 3, 4]
|
[運算式 for 項目 in 可迭代項目 if 條件式]
- 製作一個新的生成式,用來建立一個裡面只有1到5的奇數的串列
1 2 3
| >>> a_list = [number for number in range(1, 6) if number % 2 == 1] >>> a_list [1, 3, 5]
|
1 2 3 4 5 6
| >>> a_list = [] >>> for number in range(1, 6): if number % 2 == 1: a_list.append(number) >>> a_list [1, 3, 5]
|
- 最後,也可以在對應的生成式中使用二組以上的for子句
- 舊式的嵌套迴圈
1 2 3 4 5 6 7 8 9 10 11
| >>> rows = range(1,4) >>> cols = range(1,3) >>> for row in rows: for col in cols: print(row, col) 1 1 1 2 2 1 2 2 3 1 3 2
|
- 再來,使用生成式,並將他指派給變數cells,製作一串(row, col)tuple:
1 2 3 4 5 6 7 8 9 10 11
| >>> rows = range(1,4) >>> cols = range(1,3) >>> cells = [(row, col) for row in rows for col in cols] >>> for cell in cells print(cell) (1, 1) (1, 2) (2, 1) (2, 2) (3, 1) (3, 2)
|