计算单词开头连续相同字母数时遇字符串索引越界错误求解决
问题解决:字符串索引越界错误修复
错误原因
你的代码在对比字母时,未判断当前索引是否超出两个待比对单词的长度范围。比如对比hello和hell时,hell仅4个字符,当letter增加到4时,i[letter]会访问不存在的索引,触发IndexError。
修正方案(两种可选)
方案一:用zip简化遍历(推荐)
def same(word, liste): dico = dict() for current_word in liste: match_count = 0 # 同时遍历两个单词的字符,较短单词遍历完后自动停止 for w_char, c_char in zip(word, current_word): if w_char == c_char: match_count += 1 else: break dico[current_word] = match_count return max(dico, key=dico.get)
- 利用
zip函数自动对齐两个单词的字符,避免手动索引操作,从根源上杜绝越界问题。 - 字符不同时立即跳出循环,完全符合“逐字母比对直到出现不同”的需求。
方案二:保留原循环结构,增加边界判断
def same(word, liste): dico = dict() for i in liste: letter = 0 # 新增两个边界判断:不超过目标单词长度,也不超过当前单词长度 while letter < len(word) and letter < len(i) and word[letter] == i[letter]: letter += 1 dico[i] = letter return max(dico, key=dico.get)
- 在原
while条件中加入长度判断,确保索引始终在有效范围内。 - 保留你原本的代码逻辑结构,仅做最小修改。
测试输入same('hello',['hi','hell','helo']),两种方案都会正确返回'hell'。
内容的提问来源于stack exchange,提问作者Kev74
相关产品推荐
相关产品推荐

