用地图函数中内置的pythons替换函数

时间:2018-02-05 13:28:26

标签: python lambda

问题:我希望提高对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)

如果有人能帮我解决这个问题,我会非常感激。

4 个答案:

答案 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))

它完美无缺。一旦我们拥有它,就没有必要再分开它。