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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 11:27:22