You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 16:15:07