Python中使用split函数后如何添加空格?不用replace()的实现问题
问题分析与解决
第二段代码输出无空格的原因
你的第二段代码逻辑存在明显问题:
- 第一个循环中,
string.split()按空格拆分出单词列表,但你直接将每个单词(或替换后的单词)拼接到rev中,没有在单词之间添加空格,这一步结束后rev已经是无空格的单词拼接结果。 - 第二个循环遍历原字符串的每个字符,遇到空格就往
rev末尾追加空格——相当于把所有空格都放在了整个字符串的最后,而非单词之间,所以最终输出的单词部分仍然是连在一起的,空格全在末尾(可能你没注意到这部分)。
正确的字符串拼接实现(不使用replace())
不需要单独循环加空格,在拼接每个单词时同步添加空格即可,最后去掉末尾多余的空格:
string = 'You are my sunshine, you are my everything.' repstr = 'are' repwth = 'were' rev = '' for a in string.split(): # 建议用==精准匹配,原代码的in会误判包含are的单词(比如area) if a == repstr: rev += repwth + ' ' else: rev += a + ' ' # 移除最后一个多余的空格 rev = rev.rstrip() print(f'The output string: {rev}')
更高效的写法(推荐用join拼接字符串,避免多次字符串拷贝):
string = 'You are my sunshine, you are my everything.' repstr = 'are' repwth = 'were' # 用列表推导式生成替换后的单词列表 words = [repwth if word == repstr else word for word in string.split()] # 用空格连接所有单词 rev = ' '.join(words) print(f'The output string: {rev}')
关于f-string中的空格
f-string仅负责格式化输出,空格问题本质是rev变量本身是否包含正确的空格。只要rev里的单词之间有空格,直接在f-string中输出{rev}就会显示正确格式,不需要额外在f-string里做处理。
内容的提问来源于stack exchange,提问作者Arnu C.
相关产品推荐
相关产品推荐

