Lambda表达式和字符串

2024-10-03 21:28:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在学习lambda表达式,我想知道如何使用它来计算字符串中的元音数。例如, 我正在使用以下命令:

result = lambda i, y: i + 1 for x in y if x in "aeoiuAEIOU"
print(result(0,s)

但是,我收到一个语法错误。 另外,为了澄清我的理解,lambda表达式返回冒号后面的表达式。有人能给我指一下正确的方向吗?你知道吗


Tags: lambda字符串in命令forif表达式result
3条回答

谢谢西尔维奥的帮助!像你建议的那样填充一个列表给了我一个不太清楚的答案

[1, 1, 1, 1, 1]

当发电机返回时

<generator object <lambda>.<locals>.<genexpr> at 0x0000028884166C00>

最后,我用发电机上的sum

result = lambda i, y: sum(i + 1 for x in y if x in "aeoiuAEIOU")
print(result(0, s))

我的答案是5。你知道吗

对我来说,这是对lambda的不当使用,因为lambda应该是没有名字的函数定义,或者或多或少是一个废弃函数。另外,语法错误的原因是生成器表达式不正确,请使用sum进行类似操作。你知道吗

result = lambda y: sum(1 for x in y if x in "aeoiuAEIOU")

您甚至可以使用map:

result = lambda y: sum(map(y.count, "aeoiuAEIOU"))

但是这可以用一个实际的函数定义更清晰、更正确地完成,并且可以包含更多的语句

#more appropriately named count_vowels vs result and s vs y
def count_vowels(s):
    _s = s.lower()
    return sum(map(_s.count, 'aeiou')

您也可以使用re(regex)来实现:

import re

def count_vowels(s): return len(re.findall("[aeiou]", s, re.I))

re.I忽略case,因此不必担心capsvs uncaps

只是解析模棱两可。考虑

result = lambda i, y: (i + 1 for x in y if x in "aeoiuAEIOU")

当然,现在它将返回一个generator对象,这不会很好地打印出来。如果你想要一份清单,你可以试试

result = lambda i, y: [i + 1 for x in y if x in "aeoiuAEIOU"]

相关问题 更多 >