# 每天學點Python之comprehensions
推導式可以簡化對數據的處理,讓代碼簡潔的同時還具有很高的可讀性,這在Python中非常常見。
### 列表推導式
通過列表推導式可以對列表中的所有元素都進行統一的操作來獲得一個全新的列表(原列表不發生變化),形式如`[處理方式 for 元素 in 列表]`,其中的處理方式可以是任何操作:
~~~
>>> a=[1,2,3,4]
>>> [i*2 for i in a]
[2, 4, 6, 8]
>>> a
[1, 2, 3, 4]
>>> [(i*2,i+10) for i in a]
[(2, 11), (4, 12), (6, 13), (8, 14)]
~~~
可以通過加上if語句來過濾掉原列表中的一些元素:
~~~
>>> a=[1,2,3,4]
>>> [i*2 for i in a if i>2]
[6, 8]
~~~
### 字典推導式
我們可以通過推導式來創建一個字典,不過字典推導式的括號是花括號:
~~~
>>> a
[1, 2, 3, 4]
>>> { "str"+str(i):i for i in a }
{'str3': 3, 'str1': 1, 'str4': 4, 'str2': 2}
~~~
運用字典推導式有一個妙用,就是可以調換鍵和值的位置:
~~~
>>> a={'one':1,"two":2,"three":3}
>>> {value:key for key,value in a.items()}
{1: 'one', 2: 'two', 3: 'three'}
~~~
> 注:確保值也是不可變類型,例如字符串、元組等
### 集合推導式
集合推導式與字典推導式類似,不過只有一個值而不是鍵值對:
~~~
>>> a={1,2,3,4,5}
>>> {i**2 for i in a if i%2==1}
{1, 9, 25}
~~~