Python非重复元素检测代码失效排查:为何代码看似正常却无法运行
代码问题排查与修复
问题根源
你这段代码里的flag变量是在所有循环外部初始化的,一旦某个字符被检测到重复,flag就会被设为False,之后的循环里这个值不会自动重置为True。比如处理字符串'151256'时,第一个字符'1'是重复的,flag变成False后,后面哪怕遇到唯一的字符(比如索引3的'2'、索引5的'6'),也会因为flag一直是False而无法被识别打印。
修复后的代码
把flag = True移到外层循环的每一次迭代开头,确保每次检查新字符时,都先默认它是唯一的,再进行对比:
string = '151256' for i in range(len(string)): flag = True # 每次检查新字符前重置标记 for j in range(len(string)): if i == j: continue if string[i] == string[j]: flag = False break # 找到重复就终止内层循环,减少无效计算 if flag: print(f"非重复元素索引:{i},字符:{string[i]}")
额外优化说明
- 内层循环找到重复后添加
break,避免不必要的后续对比,提升效率 - 简化
if flag == True为if flag,符合Python的简洁写法 - 打印时同时输出索引和对应字符,结果更直观
运行修复后的代码,会正确输出字符串中的非重复元素:索引3的'2'和索引5的'6'。
内容的提问来源于stack exchange,提问作者Adhil
相关产品推荐
相关产品推荐

