1. 程式人生 > 實用技巧 >迭代和列表生成式

迭代和列表生成式

當我們使用for迴圈時,只要作用於一個可迭代物件,for迴圈就可以正常執行,而我們不太關心該物件究竟是list還是其他資料型別。

那麼,如何判斷一個物件是可迭代物件呢?方法是通過collections模組的Iterable型別判斷:

from collections.abc import Iterable
d = {'a': 1, 'b': 2, 'c': 3}
print(isinstance(d, Iterable))

如果要對list實現類似Java那樣的下標迴圈怎麼辦?Python內建的enumerate函式可以把一個list變成索引-元素對,這樣就可以在for迴圈中同時迭代索引和元素本身

for i, k in enumerate(d):
    print(i,k)
0 a
1 b
2 c

列表生成式

[x * x for x in range(1, 11) if x % 2 == 0]

還可以使用兩層迴圈,可以生成全排列

>>>[m + n for m in 'ABC' for n in 'XYZ']
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']

列表生成式也可以使用兩個變數來生成list

>>> d = {'x': 'A', 'y': 'B', 'z': '
C' } >>> [k + '=' + v for k, v in d.items()] ['y=B', 'x=A', 'z=C']

在一個列表生成式中,for前面的if ... else是表示式,而for後面的if是過濾條件,不能帶else

>>> [x if x % 2 == 0 else -x for x in range(1, 11)]
[-1, 2, -3, 4, -5, 6, -7, 8, -9, 10]