Python字符串重复字符统计程序异常:无重复单词最后字符计数为2求解
字符串重复字符统计问题分析
你的代码出现最后一个字符计数为2的原因很明确,核心是两个逻辑错误:
- 循环内的赋值逻辑错误:你在for循环里每次执行
dict[letter] = 1,这会把每个字符的计数强行重置为1,哪怕这个字符之前已经被统计过,完全起不到累加计数的作用。 - if判断的位置错误:那个判断字符是否存在并加1的代码块是在for循环外面的。Python中,for循环结束后,循环变量
letter会保留最后一次迭代的内容(也就是字符串的最后一个字符's'),这时候执行dict[letter] +=1,就会把最后一个字符的计数额外加1,所以不管原字符串有没有重复,最后一个字符的数值都会变成2。
修正后的代码示例
基础写法
def is_isogram(string): char_count = {} # 避免用dict作为变量名,会覆盖Python内置的dict类型 for letter in string: if letter in char_count: char_count[letter] += 1 else: char_count[letter] = 1 return char_count print(is_isogram("Dermatoglyphics"))
简化写法(利用字典get方法)
def is_isogram(string): char_count = {} for letter in string: # get方法:如果键存在则返回对应值,不存在则返回默认值0,然后加1 char_count[letter] = char_count.get(letter, 0) + 1 return char_count
修正后的代码会正确统计每个字符的出现次数,测试无重复字符的"Dermatoglyphics"时,所有字符的计数都会是1。
内容的提问来源于stack exchange,提问作者ETPROG....
相关产品推荐
相关产品推荐

