You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写更优雅的Python代码统计给定字符串中的元音数量?

更优雅的元音统计Python代码写法

你的原代码功能正常,但存在可简化和优化的空间,比如没必要把字符串转成列表再遍历。下面是几种更简洁优雅的实现方式:

方式一:生成器表达式 + sum(最简洁高效)

核心逻辑一行搞定,兼顾效率与可读性:

words = input("Enter a word:")
vowels = {"a", "e", "i", "o", "u"}
number = sum(1 for char in words if char.lower() in vowels)
print(f"The number of vowels in {words} are {number}")
  • 把元音定义成集合,in操作的查询效率比列表高很多(从O(n)降到O(1)),字符串越长优势越明显
  • char.lower()确保不管输入是大写还是小写元音都能被统计到
  • 生成器表达式遍历每个字符,符合条件就生成1,sum直接累加得到总数,省去手动计数的循环

方式二:函数式风格(filter + len)

如果偏好函数式写法,可以用filter过滤出元音字符后取长度:

words = input("Enter a word:")
vowels = {"a", "e", "i", "o", "u"}
number = len(list(filter(lambda c: c.lower() in vowels, words)))
print(f"The number of vowels in {words} are {number}")

filter返回包含所有符合条件字符的迭代器,转成列表后用len就能直接得到数量

方式三:简化原循环写法

如果还是想保留循环结构,也可以去掉冗余步骤:

words = input("Enter a word:")
vowels = {"a", "e", "i", "o", "u"}
number = 0
for char in words:
    if char.lower() in vowels:
        number += 1
print(f"The number of vowels in {words} are {number}")

去掉了没必要的list(words)转换(字符串本身就是可迭代对象,直接遍历即可),同时加入大小写兼容处理

额外细节优化

  • 原代码里input(str("Enter a word:"))的str()是多余的,input的参数本身就是字符串,直接写input("Enter a word:")就行
  • 如果只需要统计小写元音,去掉.lower()即可

内容的提问来源于stack exchange,提问作者moonpie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 03:08:11