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
相关产品推荐
相关产品推荐

