如何使用 enumerate 函数和 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)

我想要这样的输出

上帝是伟大的

但它给了我这个输出

我很高兴

解决方法

您可以通过使用 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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...