我只想定义一个函数 number_of_vowels,它返回字符串中元音的数量。
我的代码如下:
vowels='aeiou'
def number_of_vowels(word):
return[len([letter.lower() for letter in word if letter in vowels])]
names = ["Ben", "April", "Zaber", "Alexis", "McJagger", "J.J.", "Madonna"]
number_of_vowels(names)
我的结果只有 [0]。不知道为什么
最佳答案
您正在提供一个列表,但您的逻辑仅适用于单个字符串:
number_of_vowels('Bean') # [2]
您需要调整函数的输入,或者修改函数以计算列表中每个元素的元音数量。由于您希望输出为数字列表,因此我假设您正在寻找第二个选项。
为此,只需在您的列表理解中添加一个额外的 for
子句:
def number_of_vowels(words):
return [len([letter for letter in word if letter.lower() in vowels]) \
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()
而不是仅仅创建一个小写字母列表。否则元音为大写字母,例如在“四月”中,将被忽略。 - 将元音转换为
set
查找复杂度为 O(1)。
关于python - 从单词列表中计算元音并将数字作为列表返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52711122/