对于此函数,我的代码仅适用于此示例,但我不知道为什么它不适用于所有示例。任何人都可以帮助我吗?
def remove_punctuation(s):
'''(str) -> str
Return s with all non-space or non-alphanumeric
characters removed.
>>> remove_punctuation('a, b, c, 3!!')
'a b c 3'
'''
new_str = ''
for char in s:
if char.isdigit() or char.isalpha():
new_str = new_str + char + " "
new_s = new_str[:len(new_str)-1]
return new_s
这就是我所拥有的。
答案 0 :(得分:0)
由于这条线
new_str = new_str + char + " "
您的代码总是在每个保留字符后添加一个空格。因此,字母数字字符的运行最终会有空格。
你的函数不起作用的另一个例子是字符串中有多个空格,例如'a, b, c, 3!! '
。根据你的描述,空间应该保留。
您的函数还可以使用isspace()
检查字符是否为空格。这将包括空格字符,标签,新行等:
def remove_punctuation(s):
'''(str) -> str
Return s with all non-space or non-alphanumeric
characters removed.
>>> remove_punctuation('a, b, c, 3!!')
'a b c 3'
'''
new_str = ''
for char in s:
if char.isalnum() or char.isspace():
new_str = new_str + char
return new_str
print(repr(remove_punctuation('a, b, c, 3!!')))
print(repr(remove_punctuation('a, b, c, 3!!')))
输出:
'a b c 3' 'a b c 3'
如果您只想保留空格字符,则可以将char.isspace()
替换为char == ' '
。
以下是使用str.join()
和列表理解/生成器表达式从字符串中删除字符的常用方法:
def remove_punctuation(s):
'''(str) -> str
Return s with all non-space or non-alphanumeric
characters removed.
>>> remove_punctuation('a, b, c, 3!!')
'a b c 3'
'''
return ''.join(c for c in s if c.isalnum() or c.isspace())