我试图使一个空列表的长度与字符串中的字母数相同:
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有什么问题?
答案 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)