在Python中将已定义的函数更改为lambda函数

时间:2019-02-08 01:16:57

标签: python python-3.x

def char(word):
    lower = word.lower()
    for letters in lower:
        number = letters.count('a')
    return(number)

我上面有一个已定义的函数,并且我试图将其更改为lambda函数。我应该怎么做? :)


(更新)下面的此功能如何?我试图用一个字来计算所有的“ a”,但是看评论似乎我错了。如果下面的代码方向正确,如何转换为lambda函数?

def number_of_vowels(word):
    i = 0
    lower = word.lower()
    for char in lower:
        if char in 'a':
            i += 1
    return(i)   

2 个答案:

答案 0 :(得分:0)

您的代码:

def number_of_vowels(word):
    i = 0
    lower = word.lower()
    for char in lower:
        if char in 'a':
            i += 1
    return(i)   

只是很长的拼写方式:

def number_of_vowels(word):
    return word.lower().count('a')

(尽管有名称)

仅计算a / A个字符,而不是全部元音。等效的lambda为:

lambda word: word.lower().count('a')

如果您想让它计数全部 个元音,则可以使用sum函数和生成器表达式来实现:

lambda word: sum(1 for let in word.lower() if let in 'aeiouy')

答案 1 :(得分:0)

因此,最简单的方法是直接使用str.count()

lambda word : word.lower().count('a')

如果您想使用类似您的代码的方法,即使用for循环而不是count()方法,请在lambda表达式中使用列表推导:

lambda word : sum([int(letter == 'a') for letter in word])

如果您想计算更多的元音或更多的字母,请使用两个参数:

lambda word,letters : sum([int(letter in letters) for letter in word])

感谢@ShadowRanger的更正,在较早的版本中,我错误地在每个表达式中添加了if word else 0语句,这绝对是不必要的。