推導式提供了更簡潔高效的方法來生成序列而又不失程式碼的可讀性。
推導式是 Python 裡很有用的一個特性,它可以用一行程式碼就可以建立一個新的序列(比如:列表,集合,字典等等)。透過這個效能,不僅可以少寫很多程式碼,而且效能上也更快。
Python 裡有四種推導式:
列表推導式(List Comprehensions)字典推導式(Dictionary Comprehensions)集合推導式(Set Comprehensions)生成器推導式(Generator Comprehensions)下面我們就來認識一下它們。
列表推導式(List Comprehensions)假如你有一個列表,你想去掉該列表中的所有負數,那通常的做法使用 for 迴圈:
但如果你知道列表推導式,那麼這個過程就短得多,只需要一行程式碼:
很簡單是不,下面說一下列表推導式的結構:
output_list = [expression for var in input_list if condition]
這裡的 if condition 語句並不是必須要有的,比如要獲得上面的那個列表各項的平方數:
字典推導式(Dictionary Comprehensions)跟列表推導式一樣,透過同樣方式生成字典的方法,就是字典推導式。
例子1--從列表生成字典
假如你想從一個全是數字的列表來建立一個字典,列表裡的數字作為 key, 數字的的字串值作為 value, 然後再某個限制條件,最終獲得你想要的字典資料:
上面的程式碼也行得通,如果使用字典推導式:
一行程式碼就解決了。
例子2--操作已有的字典
咱們來看一下這個例子,從已有的字典中,獲取一個新字典,假如你有個字典:
dict = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
你想把字典的每個值都變大3倍,當然通常方法還是 for 迴圈,不過我們用字典推導式:
為了方便理解,列表推導式模板是這樣的:
{key:value for (key,value) in dict if key,value satisfy condition}
集合推導式(Set Comprehensions)
集合推導式跟列表推導式差不多。我們來看一個例子,就比如我們要把一個全是數字的列表中的奇陣列成一個集合,用 for 迴圈的話:
使用集合表示式:
集合推導式除了是使用 {} 外,其他形式都跟列表推導式一樣。
生成器推導式(Generator Comprehensions)生成器推導式(或叫生成器表示式),其結構也跟列表表示式相似。
例如你需要將數字列表中各項平方運算並排除奇數項:
使用生成器推導式就可以簡化 square_even 這個方法:
需要注意的是生成器推導式是使用 () ,其他基本結構跟列表推導式一樣。