Python技术迷

python面试题:如何删除字符串中的所有空格

删空格这事,说起来简单,真动起手来,能写出各种花活。你问我为啥一个小小的删除空格的操作还能写文章?我只能说,兄弟,你低估了Python开发工程师的职业敏感度。

前几天我在群里看到一段代码,写得规规矩矩的,看起来像是大学Python作业级别的实现:

import re

string = "C O D E"
spaces = re.compile(r'\s+')
result = re.sub(spaces, '', string)
print(result)

输出当然是:

CODE

结果对了,但方式不优雅。

作为一个在代码风格上略微龟毛的Python程序员,我下意识地皱了皱眉:为啥删个空格还要搞个re.compile,有种用高射炮打蚊子的既视感。

用正则处理空格,太重了点

用正则当然可以,灵活且强大。但就这段代码,re.compile + re.sub的组合,在删除普通空格这种小事上,着实显得有点大材小用。就像你家门口有个杂草,你非得拖出一台收割机来割它——当然割得掉,但你不嫌费油吗?

其实Python提供了很多更直接的方式:

string = "C O D E"
result = string.replace(" ", "")
print(result)

这个replace(" ", ""),清爽利落、无痛上手,效率也高。

那什么时候用正则才不算“浪费”?

re.sub真正的用武之地,是当你要匹配的东西不只是一个空格,而是一堆花里胡哨的空白字符,比如:

制表符\t

换行符\n

连续的多个空格"    "

混合型空白字符:" \n\t "

这种恶心的组合拳。

这个时候用正则就是专业选手的表现:

import re
string = "C\t O\n D  E"
result = re.sub(r'\s+', '', string)
print(result)

输出仍然是CODE,而且无论你空格换行tab怎么搞,都能干得干干净净。

我个人的习惯是这样分工的:

干净的数据,只要删空格,replace(" ", "")就足够了

脏数据、文本清洗,再考虑re.sub(r'\s+', '')上场

有没有更“Pythonic”的做法?

当然有,如果你追求极致优雅(或者面试想装点逼),可以这么写:

''.join("C O D E".split())

这个写法是先用split()默认按所有空白字符拆成列表,然后用join()拼起来,效果跟前面一样:

CODE

这种写法的优势是:它不仅能去掉空格,也能去掉\t、\n等杂七杂八的白字符,而且不用正则库,效率不低,可读性也强。

顺带说说效率差别

你可能会问:这几个方法性能差多少?我的建议是:除非你要处理的是百万级的字符串数组,否则你根本感觉不到区别。

但要是你真好奇,可以上timeit测一波。我之前测过一次,结论如下:

str.replace() 最快

''.join(str.split()) 次之

re.sub(r'\s+', '', str) 最慢(虽然也快得很)

面试题:如何在Python中删除字符串中的所有空格?有哪些方式?区别是什么?

最优答案可以这样说:

可以使用多种方式删除字符串中的空格,具体选用哪种方式取决于需求的复杂程度:

  1. 简单替换空格:

    string.replace(" ", "")

    如果只需要删除普通空格,这种方法最简单、效率也最高。

  2. 去除所有空白字符(包括换行、制表符):

    import re
    re.sub(r'\s+', '', string)

    使用正则表达式可以处理更复杂的情况,但性能相对较低,代码可读性也不如其他方法。

  3. 使用 split 和 join:

    ''.join(string.split())

    这是一个简洁的Pythonic写法,可以去除所有空白字符,不依赖正则,效率也不错。

通常在日常开发中,推荐根据输入数据的清洁程度来选择方法。如果是干净数据,用replace;如果涉及文本清洗,考虑re.sub或split/join组合。

最后,我为大家打造了一份deepseek的入门到精通教程,完全免费:https://www.songshuhezi.com/deepseek

也可以看我写的这篇文章《DeepSeek满血复活,直接起飞!》来进行本地搭建。

对编程、职场感兴趣的同学,大家可以联系我微信:golang404,拉你进入“程序员交流群”。
🔥虎哥私藏精品 热门推荐🔥

虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》。

资料包含了《IDEA视频教程》、《最全python面试题库》、《最全项目实战源码及视频》及《毕业设计系统源码》,总量高达650GB,全部免费领取。