如何在其中编写带有for循环的Lambda

时间:2016-02-06 07:12:20

标签: python python-2.7 for-loop lambda

我试图使一个空列表的长度与字符串中的字母数相同:

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

lambda应该相当于这段代码:

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

我尝试过以下lambda:

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

然而,它不断回复Syntax Error并突出显示单词for

我的lambda有什么问题?

3 个答案:

答案 0 :(得分: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]

但是......用lambda:

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

答案 1 :(得分:2)

你想要一个带有字符串s的lambda,并返回一个长度为len(s)的列表,其所有元素都是None。你不能在lambda中使用for循环,因为for循环是一个语句,但lambda的主体必须是一个表达式。但是,该表达式可以是列表推导,您可以在其中进行迭代。以下将解决这个问题:

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

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

答案 2 :(得分:1)

你不需要lambda。您所需要的只是:

[None] * len(string)