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

Python单词长度统计:如何将计数元素与比例输出并列显示?

解决单词长度占比统计的两个问题

问题1:计数与占比输出不对应

之前分开维护计数列表和计算占比,容易出现顺序错位或对应关系混乱。解决核心是用字典同时存储单词长度和对应计数,遍历字典时可直接获取长度、计数并计算占比,实现一一对应输出。

问题2:f-string作为字典键时计数无法累加

用f-string(如f"{len(word)}")作为键本身不会导致计数失败,大概率是你代码逻辑有疏漏:比如每次循环重新初始化字典,或者未清理单词中的标点/大小写,导致同一实际长度的单词被误判为不同长度。

完整可运行代码

# 初始化统计字典:键为单词长度(整数),值为对应单词数量
word_length_counts = {}
total_words = 0

# 读取并处理文本文件
with open('romeo_and_juliet_data.txt', 'r', encoding='utf-8') as file:
    for line in file:
        # 拆分每行单词
        raw_words = line.strip().split()
        for word in raw_words:
            # 清理单词:保留字母、转小写,避免标点/大小写干扰统计
            cleaned_word = ''.join([char.lower() for char in word if char.isalpha()])
            if cleaned_word:  # 跳过空字符串(比如全是标点的情况)
                word_len = len(cleaned_word)
                total_words += 1
                # 累加对应长度的单词计数
                word_length_counts[word_len] = word_length_counts.get(word_len, 0) + 1

# 按单词长度升序输出结果
for length in sorted(word_length_counts.keys()):
    count = word_length_counts[length]
    proportion = (count / total_words) * 100
    # 严格匹配期望输出格式
    print(f"Proportion of {length}-letter words: {proportion:.2f}% ({count} words)")

关键细节说明

  • 单词清理:通过isalpha()过滤标点,转小写确保"Romeo"和"romeo"被视为同一长度的单词。
  • 字典计数:用dict.get(key, 0)简化累加逻辑,避免判断键是否存在的冗余代码。
  • 排序输出:用sorted()对单词长度排序,让结果更规整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 22:22:31