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中删除字符串中的所有空格?有哪些方式?区别是什么?
最优答案可以这样说:
可以使用多种方式删除字符串中的空格,具体选用哪种方式取决于需求的复杂程度:
简单替换空格:
string.replace(" ", "")如果只需要删除普通空格,这种方法最简单、效率也最高。
去除所有空白字符(包括换行、制表符):
import re
re.sub(r'\s+', '', string)使用正则表达式可以处理更复杂的情况,但性能相对较低,代码可读性也不如其他方法。
使用 split 和 join:
''.join(string.split())这是一个简洁的Pythonic写法,可以去除所有空白字符,不依赖正则,效率也不错。
通常在日常开发中,推荐根据输入数据的清洁程度来选择方法。如果是干净数据,用replace;如果涉及文本清洗,考虑re.sub或split/join组合。
最后,我为大家打造了一份deepseek的入门到精通教程,完全免费:https://www.songshuhezi.com/deepseek
也可以看我写的这篇文章《DeepSeek满血复活,直接起飞!》来进行本地搭建。
对编程、职场感兴趣的同学,大家可以联系我微信:golang404,拉你进入“程序员交流群”。
虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》。