2024-10-03 21:28:21 发布
网友
我正在学习lambda表达式,我想知道如何使用它来计算字符串中的元音数。例如, 我正在使用以下命令:
result = lambda i, y: i + 1 for x in y if x in "aeoiuAEIOU" print(result(0,s)
但是,我收到一个语法错误。 另外,为了澄清我的理解,lambda表达式返回冒号后面的表达式。有人能给我指一下正确的方向吗?你知道吗
谢谢西尔维奥的帮助!像你建议的那样填充一个列表给了我一个不太清楚的答案
[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进行类似操作。你知道吗
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)来实现:
re
import re def count_vowels(s): return len(re.findall("[aeiou]", s, re.I))
re.I忽略case,因此不必担心capsvs uncaps
re.I
只是解析模棱两可。考虑
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"]
谢谢西尔维奥的帮助!像你建议的那样填充一个列表给了我一个不太清楚的答案
当发电机返回时
最后,我用发电机上的sum
我的答案是5。你知道吗
对我来说,这是对
lambda
的不当使用,因为lambda
应该是没有名字的函数定义,或者或多或少是一个废弃函数。另外,语法错误的原因是生成器表达式不正确,请使用sum
进行类似操作。你知道吗您甚至可以使用map:
但是这可以用一个实际的函数定义更清晰、更正确地完成,并且可以包含更多的语句
您也可以使用
re
(regex)来实现:re.I
忽略case,因此不必担心capsvs uncaps只是解析模棱两可。考虑
当然,现在它将返回一个generator对象,这不会很好地打印出来。如果你想要一份清单,你可以试试
相关问题 更多 >
编程相关推荐