如何编写更优雅的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
相关产品推荐
相关产品推荐

