我正在尝试检查并查看给定字符串中的每个字符是否都是字母。如果不是,则用空格替换字符。到目前为止我所拥有的是:
def removePunctuation(txt):
for char in txt:
if char.isalpha() == False:
txt.replace(char, " ")
return txt
我测试了一些输入,但它没有删除任何内容。
答案 0 :(得分:4)
使用join()
和generator expression之类的:
new_txt = ''.join(c if c.isalpha() else ' ' for c in txt)
代码的基本问题是Python字符串是不可变的。也就是说,一旦建成,它们就永远不会改变。您可以丢弃它们,因为您已完成它们,但您无法更改它们。因此.replace()
不会更改txt
。做的是返回一个替换了字符的新字符串。在你构建的循环中,这根本不是你想要的。
答案 1 :(得分:0)
使用str.translate
和defaultdict
是解决翻译问题的好方法。
from collections import defaultdict
from string import ascii_letters
translation = defaultdict(lambda: ' ', str.maketrans(ascii_letters, ascii_letters))
print('Hello.World!'.translate(translation))
答案 2 :(得分:0)
使您的功能正常工作所需的最小更改是:
foo
字符串是不可变的,因此def removePunctuation(txt):
for char in txt:
if char.isalpha() == False:
txt = txt.replace(char, " ")
return txt
new_txt = removePunctuation(txt)
不改变其参数,但返回一个新字符串。
然而,Stephen Rauch的单行是一种更“Python”的方式来实现这一目标。
str.replace