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

如何用更Pythonic的方式实现辅音统计?现有列表推导式待优化

优化辅音统计代码:更Pythonic的实现

嘿,我来帮你把这段统计辅音的代码优化得更简洁、更符合Python风格!先看看现有代码可以简化的地方,再给出几种改进方案:

现有代码的可优化点

你的代码思路是对的,但有几个可以简化的地方:

  • 没必要先split()再join()来去掉空格,直接处理原字符串更高效
  • 把标点'.'放进元音列表不太合理,应该单独排除非字母字符
  • 列表推导式会生成完整的列表,用生成器表达式可以节省内存(尤其是处理长文本时)
  • 用字符串存储元音的查找效率不如集合(集合的成员查询是O(1),字符串是O(n))

优化后的代码方案

方案1:简洁且高效的版本

def main():
    s = "This is an example sentence."
    vowels = {'a', 'e', 'i', 'o', 'u'}  # 用集合提升查找速度
    # 生成器表达式:只统计字母中不属于元音的字符
    consonant_count = len(c for c in s if c.isalpha() and c.lower() not in vowels)
    print(consonant_count)  # 输出14,符合预期

if __name__ == '__main__':
    main()

方案2:极致简洁的一行版(适合快速测试)

print(len(c for c in "This is an example sentence." if c.isalpha() and c.lower() not in {'a','e','i','o','u'}))

为什么这更Pythonic?

  • 使用集合存储元音:集合的成员查询效率远高于字符串,处理大量字符时优势明显
  • 用isalpha()过滤字母:自动排除空格、标点等非字母字符,逻辑更严谨,不用手动处理每个标点
  • 生成器表达式替代列表推导式:不需要创建完整的列表,直接计算长度,节省内存资源
  • 小写统一判断:c.lower()确保大小写字母都能正确识别(比如原句中的'T'不会被误判)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:58:39