擅长:python、mysql、java
<p>对我来说,这是对<code>lambda</code>的不当使用,因为<code>lambda</code>应该是没有名字的函数定义,或者或多或少是一个废弃函数。另外,语法错误的原因是生成器表达式不正确,请使用<code>sum</code>进行类似操作。你知道吗</p>
<pre><code>result = lambda y: sum(1 for x in y if x in "aeoiuAEIOU")
</code></pre>
<p>您甚至可以使用map:</p>
<pre><code>result = lambda y: sum(map(y.count, "aeoiuAEIOU"))
</code></pre>
<p>但是这可以用一个实际的函数定义更清晰、更正确地完成,并且可以包含更多的语句</p>
<pre><code>#more appropriately named count_vowels vs result and s vs y
def count_vowels(s):
_s = s.lower()
return sum(map(_s.count, 'aeiou')
</code></pre>
<p>您也可以使用<code>re</code><em>(regex)</em>来实现:</p>
<pre><code>import re
def count_vowels(s): return len(re.findall("[aeiou]", s, re.I))
</code></pre>
<p><code>re.I</code>忽略case,因此不必担心capsvs uncaps</p>