和列表一樣,
列表推導式
也採用方括號表示,並且用到了乙個簡寫版的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):
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 進行遍歷,其具有惰性求值的特點,進行一次遍歷後便不能再次方位內部元素,即訪問一次...