如何使用枚举函数和for循环从字符串中删除不需要的空格



我有这个代码,但它不工作。我不知道这段代码有什么问题

djtext = "g o d  i s   gre at"
analyzed = ""
for index, char in enumerate(djtext):
if not(djtext[index] == " " and djtext[index+1]==" "):
analyzed = analyzed + char
print(analyzed)

我想要这样的输出

上帝是伟大的

但是它给了我这个输出

g . d .这是伟大的

您可以通过使用split将字符串分割为两个空格,然后使用join再次将部分删除

来实现您想要的结果。
' '.join(word.replace(' ', '') for word in djtext.split('  ') if word)

考虑使用正则表达式的替代解决方案:

import re
djtext = "g o d  i s   gre at"
analyzed = re.sub(r' (.)', lambda x: x.group(1), djtext)
print(analyzed)

匹配空格后面跟着的任意字符,并用匹配的字符替换所有这样的序列。

这给出了期望的输出:

上帝是伟大的

如果你想坚持你原来的方法,那么你需要添加一个额外的条件来使它工作。您的原始代码涵盖了一种情况(减少多个空格),但忽略了其他情况(删除不必要的空格)。

下面的版本是你代码的正确版本。它添加了条件char == " " and djtext[index - 1] != " ",它只是检查当前字符是否为空格,它之前的字符是否也为空格。在这种情况下,您不会想要保留空格。

djtext = "g o d  i s   gre at"
analyzed = ""
for index, char in enumerate(djtext):
if not((char == " " and djtext[index + 1] == " ") or (char == " " and djtext[index - 1] != " ")):
analyzed += char
print(analyzed)

旁注:为了可读性,我已经将djtext[index]切换到charanalyzed = analyzed + char切换到analyzed += char

最新更新