推導式 與 生成器表示式

2021-06-26 21:32:07 字數 1380 閱讀 2206

推導式:

先講列表推導式, 其它推導式皆與之類似.

列表推導式由乙個包含表示式的中括號組成, 表示式後面跟隨乙個for子句, 之後可以有0個或多個for子句或if子句.

由於是用中括號括起來的, 所以得到的是乙個列表, 它為從乙個序列中建立列表提供了乙個簡單的方法.

其實,表示式就是將儲存在列表中的每一項的原型, 表示式後面的語句就是 這個原型所滿足的約束條件.

so, 列表推導式 = [ 表示式 + 約束語句]

例一:  將輸出 0 ~ 9 的平方

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

for inde in range(10):

print list[inde]

例二: 將輸出兩個列表中元素的笛卡爾乘積, 條件是各自列表中挑出的兩個元素值不等.

a = [(x,y) for x in [1,2,3,4,5] for y in [3,4,5] if x != y]

print a,

例三:

vecs = [-1,-2,-3,-4,-5]

array = [abs(x)**2 for x in vecs]

print array

列表推導式還可以巢狀:

官方文件上有乙個經典的例子:

考慮以下的 3x4 矩陣, 乙個列表中包含三個長度為4的列表:

matrix = [

[1, 2, 3, 4],

[5, 6, 7, 8],

[9, 10, 11, 12],

]

如果, 現在你想交換矩陣的行和列, 可以用巢狀的列表推導式:

print [[row[i] for row in matrix] for i in range(4)]

同理,

集合推導式和列表推導式類似, 只是表示式外面不是中括號 [ ], 而是大括號 ,

字典推導式外面也是大括號, 不同的是字典推導式中的表示式的形式是 " key : value "罷了.

生成器表示式:

生成器表示式和上面講述的推導式十分相似, 它是為函式服務的.  相當於將所得  列表/元組/集合/字典  當作函式的引數.

乙個例子:

sum(i*i for i in range(10))

即計算 0 ~ 9 的平方的和, 即計算 0^2 + 1^2 + ... + 9^2 = 285

生成器 生成器函式 推導式 生成器表示式

一 生成器 生成器的本質就是迭代器 生成器一般由生成器函式或者生成器表示式來建立 其實就是手寫的迭代器 def func print 111 yield 222ret func print ret 因為函式中存在yield,那麼這個函式就是乙個生成器函式。這個時候我們在想執行函式就不再是執行函式了,...

列表推導式與生成器表示式

用一行 構建乙個比較複雜有規律的列表。l1 for i in range 1,11 print l1 列表推導式 l1 i for i in range 1,11 print l1 列表推導式分兩類 迴圈模式 迴圈模式 變數 加工後的變數 for 變數 in iterable 將10以內所有整數的平...

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

生成器表示式,列表推導式 其他推導式 變數 加工後的變數 for 變數 in iterable 迴圈模式 變數 加工後的變數 for 變數 in iterable if 條件 篩選模式 優點 1,節省 一行搞定.2,看著高大上.缺點 不好排錯.整體 凡是用列表推導式構造的列表物件,用其他方式都可構建...