如何从字符串中删除所有空格

238

我该如何在Python字符串中删除所有空格?例如,我想将像strip my spaces这样的字符串转换为stripmyspaces,但似乎无法使用strip()实现:

>>> 'strip my spaces'.strip()
'strip my spaces'

16
注意,str.strip只影响开头和结尾的空格。 - Roger Pate
它也不能处理Unicode的实际空格,例如零宽度空格。有关详细信息,请参见https://dev59.com/Tm865IYBdhLWcg3wlvqq#3739928。 - Greg Dubicki
'strip my spaces'.replace(' ', '') 去除我的空格 - juan
14个回答

1

简述

本解决方案已使用Python 3.6测试。

要从Python3中的字符串中去除所有空格,可以使用以下函数:

def remove_spaces(in_string: str):
    return in_string.translate(str.maketrans({' ': ''})

为了去除任何空格字符(' \t\n\r\x0b\x0c'),您可以使用以下函数:
import string
def remove_whitespace(in_string: str):
    return in_string.translate(str.maketrans(dict.fromkeys(string.whitespace)))

解释

Python的str.translate方法是str的一个内置类方法,它接受一个表格并返回通过传递的翻译表映射每个字符的字符串副本。str.translate的完整文档

要创建翻译表,使用str.maketrans。这个方法是str的另一个内置类方法。在这里,我们只使用了一个参数,即字典,在这种情况下,键是要替换的字符,映射到具有字符替换值的值。它返回用于与str.translate一起使用的翻译表。str.maketrans的完整文档

Python中的string模块包含一些常见的字符串操作和常量。string.whitespace是一个常量,返回一个包含所有被认为是空格的ASCII字符的字符串。这包括空格、制表符、换行符、回车符、换页符和垂直制表符等字符。string.whitespace的完整文档 在第二个函数中,使用dict.fromkeys创建一个字典,其中键是由string.whitespace返回的字符串中的字符,每个键的值为Nonedict.fromkeys的完整文档

1
如果不需要最佳性能,只想要一些简单的东西,您可以使用字符串类内置的“isspace”方法定义一个基本函数来测试每个字符:
def remove_space(input_string):
    no_white_space = ''
    for c in input_string:
        if not c.isspace():
            no_white_space += c
    return no_white_space

用这种方式构建no_white_space字符串并不会有理想的性能,但解决方案很容易理解。
>>> remove_space('strip my spaces')
'stripmyspaces'

如果你不想定义一个函数,你可以使用列表推导式将其转换为类似的东西。从顶部答案的join解决方案中借鉴:
>>> "".join([c for c in "strip my spaces" if not c.isspace()])
'stripmyspaces'

好奇:这个代码哪里不够“最优化性能”?具体来说,你的第一个例子,remove_space() 函数。 - Hawkeye Parker
1
我不确定Python字符串处理的当前状态如何,但在过去,Python中的字符串连接(foo_str+=bar_str)性能并不是很好。对于轻量级使用,我的示例可以胜任,但对于处理大型字符串,性能可能会成为一个问题。 - nBurn

0
这个问题在面试中被问到。如果你只能使用strip方法来给出解决方案,以下是一种方法 -
s='string with spaces'
res=''.join((i.strip(' ') for i in s))
print(res)

0

这里有另一种使用普通的列表推导式的方法:

''.join([c for c in aString if c not in [' ','\t','\n']])

例子:

>>> aStr = 'aaa\nbbb\t\t\tccc  '
>>> print(aString)
aaa
bbb         ccc

>>> ''.join([c for c in aString if c not in [' ','\t','\n']])
'aaabbbccc'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接