Python列表推導式和生成器表示式的異同

2021-08-18 03:55:27 字數 1450 閱讀 6572

和列表一樣,

列表推導式

也採用方括號表示,並且用到了乙個簡寫版的for迴圈,第一部分是乙個生成結果列表元素的表示式,第二部分是乙個輸入表示式上的迴圈。閱讀理解列表表示式的推薦做法是先從裡面的for迴圈開始,向右檢視是否有if條件,然後將推導式開始的那個表示式對映到每乙個匹配的元素上去。

[python]view plain

copy

>>> even_numbers = [x 

forx 

inrange(

10) 

ifx%

2== 

0]  

>>> even_numbers  [0,

2,4,

6,8]  

以上例子展示了使用if語句來過濾元素。

python還支援另外一種和列表表示式類似的結構,叫做生成器表示式(generator expression),除了它有一種稱之為「惰性計算」的特點以外,它和列表推導式的用法基本一致。它的工作方式是每次處理乙個物件,而不是一口氣處理和構造整個資料結構,這樣做的潛在優點是可以節省大量的記憶體。

[python]view plain

copy

>>> even_numbers = (x 

forx 

inrange(

10000

) ifx%2

== 0

)  >>> even_numbers  

0x....>  

在處理大量的資料是,最好考慮生成器表示式而不是列表推導式。

另乙個列表推導式和生成器表示式的例子是:

[python]view plain

copy

>>> data = [

'abc'

,'def'

,'i use python'

, 'hong201'

]  >>> sum([len(word) for

word 

indata])  

25>>> sum(len(word) for

word 

indata)  

25enumerate()是乙個同時能讓你迭代和計數的內建函式,而for迴圈自身只能迭代而沒辦法計數:

[python]view plain

copy

>>> data = [

123,

"abc"

,3.14

]  >>> for

i in

enumerate(data):  

...     print

i  ...  

(0, 

123)  

(1, 

'abc'

)  (2

, 3.14

)  

生成器,生成器推導式和列表推導式

python社群,大部分生成器和迭代器是一種 生成器的本質是迭代器 唯一區別 生成器是我們自己用python 構建的資料結構 迭代器都是提供的,或者轉化得來的 生成器函式 生成器表示式 python提供的 yield 乙個next 對應乙個yield yield和下乙個yield中間有 的話只執行乙...

生成器及列表推導式

迭代器 內部含有 iter next 方法的物件 可迭代物件不能取值,因為內部沒有 next 的方法 迭代器的優點 1 節省記憶體 2 惰性機制 3 單向 不可逆 如何判斷可迭代物件 迭代器 1 iter in dir obj 2 引用乙個模組 from collections import ite...

python生成器推導式

1.生成器推導式是繼列表推導式後的有一中python推導式,他比列表推導式速度更快,占用的記憶體也更少。2.使用生成器物件時,可以根據需要將他轉化為列表或者元組,也可以是喲個生成器對像 next 方法或內建函式next 進行遍歷,其具有惰性求值的特點,進行一次遍歷後便不能再次方位內部元素,即訪問一次...