python中的列表推導與生成器

2021-08-09 20:17:34 字數 1092 閱讀 5224

def t1():

func1 = [lambda x: x*i for i in range(10)]

result1 = [f1(2) for f1 in func1]

print result1

def t2():

func2 = [lambda x, i=i: x*i for i in range(10)]

result2 = [f2(2) for f2 in func2]

print result2

上面是兩個列表推導式,裡面包含有lambda表示式。輸出結果分別為:

[18, 18, 18, 18, 18, 18, 18, 18, 18, 18]

[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

在上面的例子中,列表解析會生成一系列的函式物件。例如

def func():

pass

會產生乙個名為func的函式物件。注意不同於func(),加上小括號以後,此時變為了呼叫函式物件。

函式物件只有在呼叫的時候才開始對內部的變數進行引用。在t1()方法中,對i來說, 當函式對它引用的時候, 它已經變為9, 所以10個函式都引用了i=9。

而對於t2()方法來說,lambda函式相當於變成接受兩個引數了,所以返回了不一樣的結果。

def t3():

func3 = (lambda x: x*i for i in range(10))

result3 = [f3(2) for f3 in func3]

print result3

上面的**,輸出的結果為:

[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
此時,相當於把列表推導式變成了生成器,結果又不一樣了!

對於生成器, 只有你需要的時候它才會求值, 這也是和列表解析式的區別, 列表解析式只要你執行, 馬上就把i變為了9, 可是生成器不會, 當你呼叫第乙個函式的時候, 他把相應的i求出來, 然後停止, 等你下一次呼叫, 這個就完美符合我們的預期了.

python中的列表推導式

類似於這樣 x for x in range 101 x for x in range 10 if x 2 0 x y for x in range 10 for y in range 10 式子,就叫做列表推導式 列表推導式的好處就是能快速生成列表 列表推導式的好處就是浪費記憶體 空間複雜度太大 ...

python中的列表推導式

python裡面有個很棒的語法糖 syntactic sugar 它就是list comprehension,有人把它翻譯成 列表推導式 也有人翻譯成 列表解析式 名字聽上去很難理解,但是看它的語法就很清晰了。雖然名字叫做 list comprehension,但是這個語法同樣適用於dict set...

python中的列表推導式

所謂的列表推導式,就是指的輕量級迴圈建立列表。建立乙個0 10的列表 a x for x in range 11 print a 輸出結果 0,1,2,3,4,5,6,7,8,9 上面的列表推導式等價於下面,只是 非常簡化。a for x in range 10 建立乙個1 10之間偶數的列表 a ...