Python如何编写函数从字符串中移除指定substring子串
代码修正与完善方案
原代码存在的问题
- 函数返回值标注错误:docstring标注返回
NoneType,实际需要返回处理后的字符串,应该改为str - 缩进错误:
for循环当前定义在函数体外,无法被函数调用执行 - 变量命名冲突:循环变量使用了参数名
substr,会覆盖传入的待移除子串参数 - 核心逻辑错误:当前逻辑是遍历字符串的单个字符,判断条件无实际意义,完全没有匹配子串的逻辑
完善后的代码实现
方案1:使用Python内置字符串方法实现(最简写法)
直接调用str.replace()即可快速实现移除所有匹配子串的功能,代码如下:
def remove_substring(s, substr): """(str, str) -> str 返回移除了所有子串substr后的新字符串 remove_substring("Im in cs", "cs") 输出:Im in """ return s.replace(substr, "")
方案2:手动实现匹配逻辑(不依赖内置replace方法)
如果需要自行实现子串匹配移除的底层逻辑,可以用滑动窗口思路实现:
def remove_substring(s, substr): """(str, str) -> str 返回移除了所有子串substr后的新字符串 remove_substring("Im in cs", "cs") 输出:Im in """ n = len(s) m = len(substr) # 边界情况处理:子串为空或长度超过原字符串直接返回原串 if m == 0 or m > n: return s other_s = [] i = 0 while i < n: # 检查当前位置开始是否匹配目标子串 if i + m <= n and s[i:i+m] == substr: # 匹配成功则跳过整个子串的长度 i += m else: # 不匹配则存入当前字符,指针后移一位 other_s.append(s[i]) i += 1 return ''.join(other_s)
内容的提问来源于stack exchange,提问作者Michel Hijazin
相关产品推荐
相关产品推荐

