使用Python列表推导式重写strip方法输出结果不符合预期如何修复
现有代码的问题
- 返回值类型错误:你通过列表推导式生成的是字符列表,没有拼接为字符串,因此输出时会展示带括号、逗号的数组格式。
- 匹配逻辑错误:你逐字符遍历原字符串和目标内容对比,当目标内容是长度大于1的子串(比如示例中的
Boeing)时,单个字符永远无法和整个子串相等,不会触发任何删除操作,所有字符都会被保留。 - 功能逻辑与原生
str.strip()不符:原生strip仅移除字符串首尾的指定字符集,而非全局删除所有匹配子串,如果你需要完全模拟原生方法,需要调整整体逻辑。
场景1:实现全局删除指定子串的效果
如果你需要的是删除原字符串中所有匹配的目标子串,可以参考以下修复代码:
def ourveryownstrip(string, to_remove): len_remove = len(to_remove) result = "" index = 0 str_len = len(string) while index < str_len: # 检查当前位置是否匹配目标子串 if index + len_remove <= str_len and string[index:index+len_remove] == to_remove: index += len_remove # 跳过匹配的子串长度 else: result += string[index] index += 1 return result print("The string is", ourveryownstrip(input("Enter a string:\n"), input("enter character/substring to remove:\n")))
如果允许使用内置字符串方法,可以更简化:
def ourveryownstrip(string, to_remove): return string.replace(to_remove, "")
场景2:完全模拟原生str.strip()的效果
原生strip仅删除字符串首尾的指定字符集(默认删除空白符),参考实现如下:
def ourveryownstrip(string, chars=None): # 无参数时默认删除空白符 if chars is None: chars = ' \t\n\r\f\v' str_len = len(string) left = 0 # 定位左侧第一个不需要删除的字符位置 while left < str_len and string[left] in chars: left += 1 # 定位右侧最后一个不需要删除的字符位置 right = str_len - 1 while right >= left and string[right] in chars: right -= 1 # 截取有效区间返回 return string[left:right+1]
内容的提问来源于stack exchange,提问作者Shah Jacob
相关产品推荐
相关产品推荐

