python列表解析式,字典解析式,集合解析式和生成器


一.列表解析式(列表推倒式):
功能:是提供一種方便的列表創建方法,所以,列表解析式返回的是一個列表.

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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM