1、語法
[返回值 for 元素 in 可迭代物件 if 條件]
使用中括號,內部是for迴圈,if條件語句可選
返回乙個新列表
高階:[expr for i in iterable for j in iterable2]
等價於:
ret=
for i initerable1:
for j in iterable2:
例:lst=[(x,y) for x in 'abcde' for y in range(3)]
lst=["{}*{}={}".format(j,i,i*j)for i in range(1,10) for j in range(1,10)if i>=j]
2、生成器(***)
表示式generator expression
語法:(返回值 for 元素 in 可迭代物件 if 條件)
列表解析式的中括號換成小括號就行了
返回乙個生成器
與列表解析式的區別
生成器表示式是按需計算(或稱惰性求值,延遲計算),需要的時候才計算值
列表解析式是立即返回值
生成器生成的可迭代物件只能迭代一次,列表解析式的迭代物件可以反覆迭代
生成器生成的可迭代物件可以用next(),next()可以乙個個取生成的迭代物件裡面的值
生成器本省並沒有返回任何值,只返回了乙個生成器物件
列表解析式構造並返回了乙個新的列表
語法:列表解析式的中括號換成大括號{}就行了
立即返回乙個集合
語法:列表解析式的中括號換成大括號{}就行了
使用key:value形式
立即返回乙個字典
例:等價於:
ret={}
for x in range(3):
for y in range(4):
ret[str(x)]=y
例:試著用解析式的方法完成九九乘法:
print('\n'.join(['
'.join(['
%s*%s=%-3s
'%(x,y,y*x)for x in range(1,y+1)]) for y in range(1,10)]))
[print('{}*{}={}'.format(j,i,i*jk,'\n' if i==j else ' '),end=" ")for i in
range(1,10)for j in range(1,i+1)]
列表解析與生成器表示式
列表解析與生成器表示式 列表推導式 egg list for i in range 100 egg s i print egg list l egg s i for i in range 100 if i 50 print l 在乙個列表中 將for的迴圈寫在列表的右側。for i in rang ...
Python之道 列表解析和生成器
python版本 2.7.4 主機環境 gentoo with linux kernel 3.4.36 列表解析完成的功能可以使用for迴圈替代或者map呼叫來替代。對於剛開始使用python的初學者,通常使用簡單的for迴圈,邏輯清晰,這樣會容易理解,特別是在巢狀的時候。效能對比 map呼叫比等效...
python 列表解析式和生成器
可以根據已有列表,高效建立新列表的方式。列表解析是python迭代機制的一種應用,它常用於實現建立新的列表,返回的是乙個列表,因此用在中。列表解析式因編譯器進行優化,提高了效率,減少出錯,增加可讀性 示例1 生成乙個列表,元素0 9,對每乙個元素自增1後求平方返回新列表 常規寫法 new for i...