Python之道 列表解析和生成器

2021-08-27 12:46:50 字數 1486 閱讀 7679

python版本:2.7.4

主機環境:gentoo with linux kernel 3.4.36

列表解析完成的功能可以使用for迴圈替代或者map呼叫來替代。對於剛開始使用python的初學者,通常使用簡單的for迴圈,邏輯清晰,這樣會容易理解,特別是在巢狀的時候。

效能對比:map呼叫比等效的for迴圈要快兩倍,而列表解析往往比map解析要稍快一些。

dex = [x ** 2 for x in range(10)]

print dex

dex1 = list(map(lambda x:x ** 2,range(10)))

print dex1

第乙個就是使用的列表解析產生的例子。第二個是使用map呼叫產生列表,第三個是使用for迴圈產生的列表。

之所以列表解析速度會快,那是因為map和列表解析在直譯器中以c語言的速度來執行的,比python的for迴圈**在pvm中步進要快的多。

類表解析中也可以新增判斷條件,例項如下:

ifdex = [x ** 2 for x in range(10) if x % 2 == 0]

print ifdex

ifdex1 = list(filter((lambda x:x % 2 == 0),map(lambda x:x ** 2,range(10))))

print ifdex1

什麼是生成器?生成器是為了在需要的時候才產生結果,而不是立即產生結果。這樣會節省記憶體,而不用把所有的記錄都載入到記憶體,並且允許計算時間分散到各個結果請求。

例項如下:

dex3 =

for x in generator(10):

print dex3

生成器的定於如下:

def generator(n):

for i in range(10):

yield i

生成器支援迭代器協議,內建next函式,通過dir(x)檢視如下:

['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__iter__', '__name__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'close', 'gi_code', 'gi_frame', 'gi_running', 'next', 'send', 'throw']

python 列表解析式和生成器

可以根據已有列表,高效建立新列表的方式。列表解析是python迭代機制的一種應用,它常用於實現建立新的列表,返回的是乙個列表,因此用在中。列表解析式因編譯器進行優化,提高了效率,減少出錯,增加可讀性 示例1 生成乙個列表,元素0 9,對每乙個元素自增1後求平方返回新列表 常規寫法 new for i...

python列表解析

列表解析是乙個列表對映出另乙個列表,它的基本形式是乙個方括號裡面包含乙個for語句對乙個iterable物件迭代 expression for target1 in iterable1 if condition1 for targetn in iterablen if conditionn 上面是列...

python 列表解析

m 1,2,3 4,5,6 7,8,9 col2 row 1 for row in m 獲取列表m的每個元素的第二個元素的值組成的列表 print col2 print row 1 1 for row in m 獲取列表m的每個元素的第二個元素 1的值組成的列表 print row 1 for ro...