2015-01-09 54 views
0

在如下生成列表,lambda函數在方括號外聲明,則應用於每個i的Python lambda函數聲明並要求列表生成

>>> g = lambda x: x*10 
>>> [g(i) for i in range(10,21)] 
[100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200] 

是否有可能(以及如何)在列表中聲明lambda函數並調用它?

+2

第一個猜測:'[(波長X:X * 10 )(i)我在範圍內(10,21)]'。你爲什麼覺得你想這樣做? – vaultah 2015-01-09 20:26:48

+1

您最終會生成緩慢且無法讀取的代碼 – vaultah 2015-01-09 20:28:26

+0

@enzyme請注意,短代碼並不總是代表Python中的高效代碼。 – augurar 2015-01-09 20:34:42

回答

5

的瘋狂方式:

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

理智的方式:

[i * 10 for i in range(10,21)] 
+1

說明:在理解中聲明lambda函數的問題是該函數將爲列表中的每個項目重複創建。由於拉姆達的主體是一個單一的表達式,最好將該表達式直接放入理解中。 – augurar 2015-01-09 20:32:21

3

您可以使用地圖太:

>>> list(map(lambda x:x*10,range(10,21))) 
[100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200] 
+0

很好的答案,只是'map'返回一個列表,所以不需要轉換。 – tdelaney 2015-01-09 20:53:49

+0

哎呀,應該考慮一下。 Python 2的評論是真的。 – tdelaney 2015-01-09 20:54:17

+0

Grt通過你自己意識到它:) – Hackaholic 2015-01-09 20:55:43