利用 str.split 的不带 sep 参数的行为:
>>> s = " \t foo \n bar "
>>> "".join(s.split())
'foobar'
如果您只想删除空格而不是所有空格:
>>> s.replace(" ", "")
'\tfoo\nbar'
过早的优化
尽管效率不是主要目标(编写清晰的代码才是),但以下是一些初始时机:
$ python -m timeit '"".join(" \t foo \n bar ".split())'
1000000 loops, best of 3: 1.38 usec per loop
$ python -m timeit -s 'import re' 're.sub(r"\s+", "", " \t foo \n bar ")'
100000 loops, best of 3: 15.6 usec per loop
请注意,正则表达式已被缓存,因此它并不像您想象的那么慢。预先编译它会有所帮助,但只有在实践中调用它时才重要many times:
$ python -m timeit -s 'import re; e = re.compile(r"\s+")' 'e.sub("", " \t foo \n bar ")'
100000 loops, best of 3: 7.76 usec per loop
尽管 re.sub 慢了 11.3 倍,但请记住您的瓶颈肯定在其他地方。大多数程序不会注意到这 3 个选择之间的差异。