2016-02-06 21 views
0

我試圖創建一個空列表的長度相同的字母串的數量:怎樣寫LAMBDA與for循環中它

string = "string" 
list = [] 
#insert lambda here that produces the following: 
# ==> list = [None, None, None, None, None, None] 

拉姆達應該這樣做代碼相當於:

for i in range(len(string)): 
    list.append(None) 

我曾嘗試以下拉姆達:

lambda x: for i in range(len(string)): list.append(None) 

但是它一直回答Syntax Error並突出顯示單詞for

我的lambda有什麼問題?

+2

lambdas只能包含表達式和'for'是一個語句。 –

回答

2

爲什麼不乘以?

>>> lst = [None]*5 
>>> lst 
[None, None, None, None, None] 
>>> lst[1] = 4 
>>> lst 
[None, 4, None, None, None] 

爲什麼不列出理解?

>>> lst = [None for x in range(5)] 
>>> lst 
[None, None, None, None, None] 
>>> lst[3] = 9 
>>> lst 
[None, None, None, 9, None] 

但是......隨着拉姆達:

>>> k=lambda x: [None]*x 
>>> lst = k(5) 
>>> lst 
[None, None, None, None, None] 
>>> lst[4]=8 
>>> lst 
[None, None, None, None, 8] 
1

你不需要lambda。所有你需要的是:

[None] * len(string) 
2

你想要一個拉姆達接受一個string s並返回長度len(s)所有元素都None的列表。在lambda表達式中不能使用for循環,因爲for循環是一個語句,但lambda表達式的主體必須是表達式。但是,該表達式可以是列表理解,您可以在其中進行迭代。以下將做訣竅:

to_nonelist = lambda s: [None for _ in s] 

>>> to_nonelist('string') 
[None, None, None, None, None, None]