Python字符串去重求助:避开not in、set及C++无特性的函数故障排查
问题分析与修复方案
首先咱们来拆解下你的代码里的几个核心问题:
1. find函数无返回值,导致判断逻辑完全失效
你写的find函数只会修改全局变量key,但本身没有return语句——这意味着当你执行b = find(a[i])时,b永远是None。接下来调用find1(b)自然一直返回True,不管字符是否重复,都会执行match += a[i],这就是为什么输出要么带多余的0、要么和输入几乎一致的原因。
2. 初始值match = '0'不符合需求
你要实现的是输入字符串的去重,初始给match赋值'0'会导致最终结果凭空多一个无关字符,这显然偏离了你的目标。
3. 全局变量key的使用冗余且易出错
这种小逻辑里用全局变量完全没必要,反而会让代码逻辑变得混乱,咱们可以改成函数返回值的方式,更贴近C的编程习惯(C里很少用全局变量做这类判断)。
修复后的代码
严格按照你的要求,避开not in、set(),用类似C++的遍历判断逻辑实现:
def is_char_exist(char, target_str): # 模拟C++风格的遍历检查:字符存在返回True,否则返回False for c in target_str: if c == char: return True return False input_str = str(input()) result = "" for char in input_str: if not is_char_exist(char, result): result += char print(result)
代码说明
is_char_exist函数:逐个遍历目标字符串的字符,找到匹配项就立即返回True,遍历结束未找到则返回False,完全是C++里手动检查元素的思路。- 初始
result设为空字符串,确保最终结果只包含输入字符串里的去重字符。 - 遍历输入的每个字符,只有当字符未在
result中出现过时才添加进去,完美实现去重需求。
内容的提问来源于stack exchange,提问作者Hewen Chen
相关产品推荐
相关产品推荐

