Python统计字符串字母出现次数 长单词统计异常问题排查
字符计数代码逻辑错误修正
问题背景
需求为统计字符串中每个字母的出现次数,以字典形式返回统计结果,例如输入hello时期望输出为{'h':1, 'e':1, 'l':2, 'o':1}(原示例中o的计数标注有误,实际hello中o仅出现1次)。原实现处理短单词时看似运行正常,处理长度大于10的字符串时会出现计数错误。
原问题代码
text = input() dict = {} for k in range(len(text)): if text[k] in dict: count +=1 dict.update({text[k]:count}) else: count=1 dict.update({text[k]:count}) print(dict)
核心问题点
- 全局count变量污染:
count是循环外的共享变量,仅在第一次遇到新字符时重置为1,后续遇到之前出现过的字符时,累加的是上一次操作残留的count值,而非该字符本身已统计的次数。短单词场景下如果重复字符连续出现,count值刚好和当前字符计数匹配,因此看似正常;字符串变长后重复字符多为非连续出现,跨字符的count值残留会直接导致统计错误。 - 变量命名不规范:
dict是Python内置字典类的保留名称,用其作为变量名会覆盖内置方法,容易触发隐性bug。 - 遍历逻辑冗余:无需通过
range(len(text))取索引再获取字符,可直接遍历字符串拿到每个字符。 - 字典更新写法冗余:Python字典支持直接通过键赋值,无需调用
update方法传单键值对。
修正后实现
基础写法(无依赖)
text = input() char_count = {} for c in text: if c in char_count: # 直接读取当前字符已统计的次数累加,避免全局变量污染 char_count[c] += 1 else: char_count[c] = 1 print(char_count)
简洁写法(标准库实现)
直接使用Python标准库collections中的Counter类,可快速完成计数逻辑:
from collections import Counter text = input() print(dict(Counter(text)))
内容的提问来源于stack exchange,提问作者Marcus
相关产品推荐
相关产品推荐

