一.列表解析式(列表推倒式):
功能:是提供一種方便的列表創建方法,所以,列表解析式返回的是一個列表.
1 lst = [1, 3, 5, 8, 10] 2 ll = [x+x for x in lst if x <= 5] 3 print ll 4 >>>[2, 6, 10]
二.字典解析式:
1 dic = {'a': 1, 'b': 2, 'c': 3} 2 d = {k: v for k, v in dic.items() if v >=2} 3 print d 4 >>>{'c': 3, 'b': 2}
三.集合解析式:
集合推導和列表推導的使用方法是類似的,只不中括號該改成大括號.
1 lst = [1, 3, 5, 8, 10] 2 aa = {x+x for x in lst if x <= 5} //注意集合解析式使用大括號!!! 3 print aa 4 >>>set([2, 10, 6]) //且輸出為一個集合!!!
四.生成器:
通過列表生成式,我們可以直接創建一個列表。但是,受到內存限制,列表容量肯定是有限的。而且,創建一個包含100萬個元素的列表,不僅占用很大的存儲空間,如果我們僅僅需要訪問前面幾個元素,那后面絕大多數元素占用的空間都白白浪費了。
所以,如果列表元素可以按照某種算法推算出來,那我們是否可以在循環的過程中不斷推算出后續的元素呢?這樣就不必創建完整的list,從而節省大量的空間。在Python中,這種一邊循環一邊計算的機制,稱為生成器(Generator)。
python提供兩種方式創造生成器:
①生成器函數:和常規函數一樣定義,不過用yield而不是return。 yield會一次返回一個結果,然后掛起,下次從掛起處繼續執行,這樣就解決了內存的限制。 注:其他方式會一次執行完所有的結果,然后再一次返回一個結果,這樣,如果數據量大就會受到內存的限制,而且會占用大存儲空間。 def gen(n): for i in range(n): yield i + 2 for item in gen(10): print item ②生成器生成式:
生成器生成式和列表生成式類似,只是將方括號替換為括號。 generators = (x+2 for x in range(10))