Python处理列表字符串无法移除标点和数字 代码问题排查
代码错误原因
- 核心错误是
str.maketrans()方法的参数逻辑完全颠倒str.maketrans()接收3个参数时的规则为:
第一个参数是要被替换的字符序列,第二个参数是替换后的目标字符序列,第三个参数是需要直接删除的字符序列。
你当前的写法是把空格放在第一个参数,要删除的数字、标点放在第二个参数,本质是执行「把空格替换为标点/数字」的逻辑,完全不符合删除标点数字的需求,所以这一步相当于没有生效。
- 次要问题是列表推导式的变量命名不规范,你在列表推导式里用了和外部列表同名的
words作为迭代变量,虽然不影响转小写功能的执行,但容易引发变量覆盖的逻辑混乱,建议调整为更清晰的命名。
修复后的正确代码
words = ["Alice's", 'Adventures', 'in', 'Wonderland', "ALICE'S", 'ADVENTURES', 'IN', 'WONDERLAND', 'Lewis', 'Carroll', 'THE', 'MILLENNIUM', 'FULCRUM', 'EDITION', '3.0', 'CHAPTER', 'I', 'Down', 'the', 'Rabbit-Hole', 'Alice', 'was'] # 前两个参数传空字符串表示不需要做字符替换,第三个参数传入所有要删除的数字、标点符号 remove_punct_num = str.maketrans('', '', '!*0123456789-,?\'.(:;)"') words = [s.translate(remove_punct_num) for s in words] words = [s.lower() for s in words]
运行后输出结果为:['alices', 'adventures', 'in', 'wonderland', 'alices', 'adventures', 'in', 'wonderland', 'lewis', 'carroll', 'the', 'millennium', 'fulcrum', 'edition', '', 'chapter', 'i', 'down', 'the', 'rabbithole', 'alice', 'was']
如果需要额外过滤掉处理后生成的空字符串,可以再加一步过滤:words = [s for s in words if s]
内容的提问来源于stack exchange,提问作者Arpit
相关产品推荐
相关产品推荐

