问题:我希望提高对python map功能的理解。我创建了一个函数,可以将给定短语中的单词长度作为列表返回。但是,我想简单地使用带有lambda函数的map函数并传入一个字符串。另外,我使用的是python 3.
当前功能(WORKS):
window.chrome = window.chrome || window.browser;
当前地图的实施(不工作):
phrase = 'How long are the words in this phrase'
def word_lengths(phrase):
phrase = phrase.split(' ')
wordLengthList = []
for i in range(len(phrase)):
wordLengthList.append(len(phrase[i]))
return wordLengthList
word_lengths(phrase)
如果有人能帮我解决这个问题,我会非常感激。
答案 0 :(得分:3)
您需要拆分短语变量的输入参数。
print(list(map(lambda x: len(x), phrase.split(" "))))
<强>输出:强>
[3, 4, 3, 3, 5, 2, 4, 6]
来自评论:更好的方法。谢谢Lukas Graf。
print(list(map(len, phrase.split(" ")))
答案 1 :(得分:2)
以下是您的逻辑的4段代码。
我已经添加了map
没有lambda
,因为这是最有效的,也是一个列表理解的多样性,因为许多人认为这是最pythonic。时间只是指示性的。
phrase = 'How long are the words in this phrase'
def word_lengths(phrase):
phrase = phrase.split(' ')
wordLengthList = []
for i in range(len(phrase)):
wordLengthList.append(len(phrase[i]))
return wordLengthList
def word_lengths_map(phrase):
return list(map(len, phrase.split(' ')))
def word_lengths_lambda(phrase):
return list(map(lambda x: len(x), phrase.split(' ')))
def word_lengths_lcomp(phrase):
return [len(x) for x in phrase.split(' ')]
word_lengths(phrase) # 4.5 microseconds
word_lengths_map(phrase) # 2.3 microseconds
word_lengths_lambda(phrase) # 4.0 microseconds
word_lengths_lcomp(phrase) # 2.8 microseconds
# [3, 4, 3, 3, 5, 2, 4, 6]
答案 2 :(得分:0)
执行此list(map(lambda x: len(x.split(' ')), phrase))
将使地图遍历短语的每个元素(这是一个单个字符),并且它将通过&#39;分割这1个字符中的每一个。 &#39; (从而创建长度为1的数组)
你应该改为分割整个短语:
list(map(len, phrase.split(' ')))
答案 3 :(得分:-1)
使用map功能如下:
list(map(lambda word:len(word),phrase))
它完美无缺。一旦我们拥有它,就没有必要再分开它。