python - 从单词列表中计算元音并将数字作为列表返回

标签 python string python-3.x list list-comprehension

我只想定义一个函数 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 == 1False == 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]

请注意一些进一步的更改以改进您的算法:

  1. 检查元音中的 letter.lower() 而不是仅仅创建一个小写字母列表。否则元音为大写字母,例如在“四月”中,将被忽略。
  2. 将元音转换为 set 查找复杂度为 O(1)。

关于python - 从单词列表中计算元音并将数字作为列表返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52711122/

相关文章:

python - 如何存储和使用数学运算符作为 python 变量

Python:元组集的并集

python - 如何检查FastAPI中是否设置了cookie?

python - 避免 Python 3 中的堆栈溢出

PHP字符串字母

java - 通过在遍历数组时比较字符串来验证有效性

python - 即使使用正确的 xpath,Scraper 也会抛出错误

python - 以固定时间间隔计算总和

python - 将 ndb.Tasklets 与 memcache 读取相结合

java - 如何在 Java 中将数组内容打印为字符串?