列表解析與生成器

2022-09-12 08:51:11 字數 1236 閱讀 9841

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...