列表生成式即List Comprehensions,是Python內置的非常簡單卻強大的可以用來創(chuàng)建list的生成式局服。
舉個例子,要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用list(range(1, 11)):
>>> list(range(1, 11))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
但如果要生成[1x1, 2x2, 3x3, ..., 10x10]怎么做驳遵?
>>> [x * x for x in range(1, 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
for循環(huán)后面還可以加上if判斷淫奔,這樣我們就可以篩選出僅偶數(shù)的平方:
>>> [x * x for x in range(1, 11) if x % 2 == 0]
[4, 16, 36, 64, 100]
還可以使用兩層循環(huán),可以生成全排列:
>>> [m + n for m in 'ABC' for n in 'XYZ']
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
if ... else
使用列表生成式的時候堤结,有些童鞋經常搞不清楚if...else的用法唆迁。
跟在for后面的if是一個篩選條件,不能帶else竞穷,如:
>>> [x for x in range(1, 11) if x % 2 == 0]
[2, 4, 6, 8, 10]
for前面的部分是一個表達式唐责,它必須根據(jù)x計算出一個結果。因此瘾带,必須加上else鼠哥,如:
>>> [x if x % 2 == 0 else -x for x in range(1, 11)]
[-1, 2, -3, 4, -5, 6, -7, 8, -9, 10]