Python字符串连续重复字符统计代码遗漏末尾字符及次数的问题排查
解决连续重复字符统计遗漏最后一组的问题
嘿,我马上帮你找出代码里的问题~
你遇到的核心问题是:循环结束后没有处理最后一组连续重复的字符。
你的循环是range(len(n)-1),这意味着i只会遍历到字符串的倒数第二个字符(索引为len(n)-2)。在循环逻辑里,只有当当前字符和下一个字符不相等时,才会把当前字符和累计次数存入d和a。但最后一组连续字符(也就是示例里的最后3个U)没有触发这个else分支——因为循环结束时,这组字符的匹配还在持续,没有机会把它们的信息追加到结果里。
最简单的修复方式:循环结束后手动补充最后一组
只需要在循环外面加上两行代码,把最后一组的字符和次数追加到结果中即可:
n = "DDDDTTTDAATTTAAAUYUUU" con = 1 a = "" d = "" for i in range(len(n)-1): if n[i] == n[i+1]: con += 1 else: d += " " + str(n[i]) a += " " + str(con) con = 1 # 补充最后一组的字符和次数 d += " " + str(n[-1]) a += " " + str(con) # 用strip()去掉开头多余的空格,让输出更整洁 print(d.strip()) print(a.strip())
运行这段代码后,就能得到你想要的正确输出:
D T D A T A U Y U
4 3 1 2 3 3 1 1 3
更优雅的优化方案(推荐)
字符串拼接在循环里效率不高,我们可以用列表来存储结果,最后用join方法格式化输出,代码可读性也更强:
n = "DDDDTTTDAATTTAAAUYUUU" # 处理空字符串的边界情况 if not n: print("") print("") exit() chars = [] counts = [] current_char = n[0] current_count = 1 # 从第二个字符开始遍历 for char in n[1:]: if char == current_char: current_count += 1 else: chars.append(current_char) counts.append(str(current_count)) current_char = char current_count = 1 # 别忘了最后一组 chars.append(current_char) counts.append(str(current_count)) print(" ".join(chars)) print(" ".join(counts))
这个版本不仅解决了遗漏问题,还能处理空字符串的边界情况,代码逻辑也更直观。
内容的提问来源于stack exchange,提问作者Maicol Rojas
相关产品推荐
相关产品推荐

