Python过滤字符串非字母字符函数返回错误该如何修复
remove_extraneous函数修复方案
原代码核心问题
- 逻辑倒置:列表推导式逻辑完全错误,原写法是遍历所有非字母字符,每次对完整原字符串执行单次替换,生成的是每一步替换后的中间结果列表,和预期逻辑完全不符
- 返回值类型错误:当前返回列表,要求返回字符串
- 字母覆盖不全:仅包含小写字母,大写英文字母会被判定为非字母删除
- docstring格式错误:示例块缩进不统一,且缺少预期输出,触发doctest校验错误
修复后完整代码
import string # 直接用内置常量覆盖大小写英文字母,无需手动定义 alphabet = set(string.ascii_letters) def remove_extraneous(text): ''' Description: 接收任意字符串,返回仅保留英文字母的结果 Examples: >>> remove_extraneous('test !') 'test' >>> remove_extraneous('code??') 'code' >>> remove_extraneous('boo!\n') 'boo' ''' # 遍历每个字符,仅保留在字母集合内的字符,最后拼接为字符串 return ''.join([char for char in text if char in alphabet])
修改说明
- 逻辑修正:改为遍历原字符串的每一个字符,仅保留属于英文字母的字符,最后用
join方法拼接为完整字符串返回 - 字母范围优化:使用
string.ascii_letters内置常量直接覆盖大小写英文字母,无需手动枚举 - 性能优化:将字母表改为集合类型,
in判断时间复杂度从O(n)降到O(1) - docstring修复:统一所有行的缩进,补全每个示例的预期返回值,解决doctest校验报错问题
内容的提问来源于stack exchange,提问作者ashnotallyson
相关产品推荐
相关产品推荐

