python - 从单词列表中计算元音并将数字作为列表返回
问题描述
我只想定义一个函数 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() in vowels
而不是仅仅创建一个小写字母列表。否则元音大写,例如“April”,将被忽略。 - 将元音转换
set
为 O(1) 查找复杂度。
推荐阅读
- typescript - 元素隐式具有“任何”类型,因为“字符串”类型的表达式不能用于索引类型
- reactjs - create-react-app 脚本“开始”与在命令行中手动输入的行为不同
- python - django 模型继承:模型创建如何与自定义管理器一起工作?
- python - 您可以根据标记的数据框列创建标记字段吗?
- r - R Quasiquotation & tidyeval 用于 R 中自己函数中的动态变量引用
- task - 历史数据加载的雪花任务,时间限制
- ibm-data-replication - IBM CDC for zOS VSAM - 如何使用 SET CONFIG 命令更改参数?
- android - 我的偏好片段顶部有一个差距,不知道是什么原因造成的
- node.js - Node.js 每 10 秒 10000 个并发 HTTP 请求
- python - Django Rest Framework 中没有视图或模型的简单 Web API