问题描述
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)
我想要这样的输出
上帝是伟大的
但它给了我这个输出
我很高兴
解决方法
您可以通过使用 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]
改为 char
,将 analyzed = analyzed + char
改为 analyzed += char
。