如果不使用正则表达式,则在Python中将字符串中的多个空格减少为一个

Pul*_*mon 5 python python-3.x

在回答这个问题时,我对如何在不使用正则表达式的情况下将字符串中的多个空格减少到一个空格感到怀疑。说的字符串如下:

s = "Mary    had    a little lamb"
Run Code Online (Sandbox Code Playgroud)

我想到的第一个解决方案是

' '.join(s.split())
Run Code Online (Sandbox Code Playgroud)

但是,如果字符串类似

s = "    Mary    had    a little lamb  "
Run Code Online (Sandbox Code Playgroud)

为了节省前导和尾随空格(如果存在),我想出了一种略有不同的方法,即在字符串的开头和结尾添加了一个虚拟字符(在本例中为“-”),后来我将其删除了。分裂。代码如下:

' '.join(('-' + s + '-').split())[1:-1]
Run Code Online (Sandbox Code Playgroud)

还有其他内置函数或另一种pythonic方式吗?

编辑: 通过保留前导和尾随空格,我的意思是,如果字符串的开头和/或结尾有多个空格,则这些多个空格也应减少为一个空格

Jon*_*nts 3

你可以使用类似的东西:

from itertools import groupby

s = "    Mary    had    a little lamb  "
res = ''.join(' ' if is_space else ''.join(chars) for is_space, chars in groupby(s, str.isspace))
#  Mary had a little lamb 
Run Code Online (Sandbox Code Playgroud)