您正在提供一个列表,但是您的逻辑仅适用于单个字符串:
number_of_vowels('Bean') # [2]
您需要调整函数的输入,或者修改函数以计算列表中每个元素的元音数量.由于您希望输出为数字列表,因此我假设您正在寻找第二个选项.
为此,只需在列表理解中添加一个额外的for子句:
def number_of_vowels(words):
return [len([letter for letter in word if letter.lower() in vowels]) \n for word in words]
number_of_vowels(names) # [1, 2, 2, 3, 2, 0, 3]
但是,请注意,不需要中介列表.您可以将sum与生成器表达式结合使用,以利用True == 1和False == 0的事实:
vowels = set('aeiou')
def number_of_vowels(words):
return [sum(letter.lower() in vowels for letter in word) for word in words]
number_of_vowels(names) # [1, 2, 2, 3, 2, 0, 3]
请注意一些进一步的更改,以改进您的算法:
>检查元音中的letter.lower()而不是仅创建一个小写字母列表.否则将元音作为大写字母,例如在“四月”中,将被忽略.
>将元音转换为O(1)查找复杂度.