在如下生成列表,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函數並調用它?
在如下生成列表,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函數並調用它?
的瘋狂方式:
[(lambda x: x*10)(i) for i in range(10,21)]
理智的方式:
[i * 10 for i in range(10,21)]
說明:在理解中聲明lambda函數的問題是該函數將爲列表中的每個項目重複創建。由於拉姆達的主體是一個單一的表達式,最好將該表達式直接放入理解中。 – augurar 2015-01-09 20:32:21
您可以使用地圖太:
>>> list(map(lambda x:x*10,range(10,21)))
[100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200]
很好的答案,只是'map'返回一個列表,所以不需要轉換。 – tdelaney 2015-01-09 20:53:49
哎呀,應該考慮一下。 Python 2的評論是真的。 – tdelaney 2015-01-09 20:54:17
Grt通過你自己意識到它:) – Hackaholic 2015-01-09 20:55:43
第一個猜測:'[(波長X:X * 10 )(i)我在範圍內(10,21)]'。你爲什麼覺得你想這樣做? – vaultah 2015-01-09 20:26:48
您最終會生成緩慢且無法讀取的代碼 – vaultah 2015-01-09 20:28:26
@enzyme請注意,短代碼並不總是代表Python中的高效代碼。 – augurar 2015-01-09 20:34:42