删除Python字符串中的空格

删除Python字符串中的空格,python,Python,一般的问题是从python字符串中删除所有额外的空格,以便每个单词之间只有一个空格,而字符串的开头或结尾没有空格 比如说,, “Hello to the world”将返回为“Hello to the world” 我们不允许使用split命令,或者除了基本字符串操作符(长度和连接)和if和while命令之外的任何命令 我编写的程序删除了字符串开头的空格以及单词之间的额外空格,但是,如果在输入字符串的最后一个单词后面有一个空格,程序将返回一个错误“索引[I]超出范围” 这是我的节目: def c

一般的问题是从python字符串中删除所有额外的空格,以便每个单词之间只有一个空格,而字符串的开头或结尾没有空格

比如说,, “Hello to the world”将返回为“Hello to the world”

我们不允许使用split命令,或者除了基本字符串操作符(长度和连接)和if和while命令之外的任何命令

我编写的程序删除了字符串开头的空格以及单词之间的额外空格,但是,如果在输入字符串的最后一个单词后面有一个空格,程序将返回一个错误“索引[I]超出范围”

这是我的节目:

def cleanstring (s):
    i=0
    while s[i]==' ':
        i=i+1
    s=s[i:len(s)]
    i=0
    while i<len(s):
        if s[i]!=' ':
            i=i+1
        else:
            if i<len(s) and s[i]==' ':
                i=i+1
            if s[i]==' ' and i+1<len(s):
                s=s[0:i]+s[i+1:len(s)]
                i=0
    return(s)
def清洗字符串:
i=0
而s[i]=='':
i=i+1
s=s[i:len(s)]
i=0

当i时,您需要在另一个位置检查i是否在范围内。试一试:

def cleanstring(s):
    i=0
    while s[i]==' ':
        i=i+1
    s=s[i:len(s)]
    i=0
    while i<len(s):
        if s[i]==' ':
            if (i+1)<len(s) and s[i+1]==' ':
                s=s[0:i]+s[i+1:len(s)]
            else:
                i=i+1
        else:
            i=i+1
    if s[len(s)-1]==' ':
        s=s[0:len(s)-1]
    return(s)
def清洗字符串:
i=0
而s[i]=='':
i=i+1
s=s[i:len(s)]
i=0

当i时,您需要在另一个位置检查i是否在范围内。试一试:

def cleanstring(s):
    i=0
    while s[i]==' ':
        i=i+1
    s=s[i:len(s)]
    i=0
    while i<len(s):
        if s[i]==' ':
            if (i+1)<len(s) and s[i+1]==' ':
                s=s[0:i]+s[i+1:len(s)]
            else:
                i=i+1
        else:
            i=i+1
    if s[len(s)-1]==' ':
        s=s[0:len(s)-1]
    return(s)
def清洗字符串:
i=0
而s[i]=='':
i=i+1
s=s[i:len(s)]
i=0

而我实际上有一个简单而聪明的解决方法。改变

if s[i]==' ' and i+1<len(s):

如果s[i]=''和i+1实际上有一个简单而聪明的解决方法。改变

if s[i]==' ' and i+1<len(s):

如果s[i]==''和i+1这是您的实现结构,以及所需的更改:

def cleanstring (s):
    i=0
    while s[i]==' ':
        i=i+1
    s=s[i:len(s)]
    i=0
    while i<len(s):
        if s[i]!=' ':
            i=i+1
        else:
            if i<len(s) and s[i]==' ':
                i=i+1
            if i<len(s) and s[i]==' ':
                s=s[0:i]+s[i+1:len(s)]
                i=0
    if s[-1] == ' ':
        s = s[:-1]
    return(s)

享受。

这是您的实现结构,包括所需的更改:

def cleanstring (s):
    i=0
    while s[i]==' ':
        i=i+1
    s=s[i:len(s)]
    i=0
    while i<len(s):
        if s[i]!=' ':
            i=i+1
        else:
            if i<len(s) and s[i]==' ':
                i=i+1
            if i<len(s) and s[i]==' ':
                s=s[0:i]+s[i+1:len(s)]
                i=0
    if s[-1] == ' ':
        s = s[:-1]
    return(s)

享受吧。

这似乎很管用。 过来看。 repr()只给字符串加引号,以便查看单词前后的实际空格数

def cleanstring (s):
    hit_letter = False
    space_counter = 0
    tmp = list()
    for letter in s:
        if letter.isalpha():
            space_counter = 0
            hit_letter = True
            tmp.append(letter)
            print letter
        elif hit_letter:
            space_counter += 1
            if space_counter < 2:
                tmp.append(letter)
    return ''.join(tmp[:-1])


print repr(cleanstring('  Hi to the  world '))
def清洗字符串:
击中字母=错误
空间计数器=0
tmp=list()
对于字母s:
如果字母.isalpha():
空间计数器=0
击中字母=正确
tmp.追加(信函)
打印信函
elif hit_字母:
空间计数器+=1
如果空间_计数器<2:
tmp.追加(信函)
返回“”。加入(tmp[:-1])
打印报告(cleanstring('Hi to the world'))

这似乎很管用。 过来看。 repr()只给字符串加引号,以便查看单词前后的实际空格数

def cleanstring (s):
    hit_letter = False
    space_counter = 0
    tmp = list()
    for letter in s:
        if letter.isalpha():
            space_counter = 0
            hit_letter = True
            tmp.append(letter)
            print letter
        elif hit_letter:
            space_counter += 1
            if space_counter < 2:
                tmp.append(letter)
    return ''.join(tmp[:-1])


print repr(cleanstring('  Hi to the  world '))
def清洗字符串:
击中字母=错误
空间计数器=0
tmp=list()
对于字母s:
如果字母.isalpha():
空间计数器=0
击中字母=正确
tmp.追加(信函)
打印信函
elif hit_字母:
空间计数器+=1
如果空间_计数器<2:
tmp.追加(信函)
返回“”。加入(tmp[:-1])
打印报告(cleanstring('Hi to the world'))
使用一些递归

def cleanString(word):
    if word[0]==" ":
        if len(word)>1:
            return cleanString(word[1:])
        return word[1:]
    elif len(word)>1:
        return word[0]+cleanString(word[1:])
    return word
print cleanString("   abcd  ") == "abcd" # True
print cleanString("   abcd  ") # abcd
使用一些递归

def cleanString(word):
    if word[0]==" ":
        if len(word)>1:
            return cleanString(word[1:])
        return word[1:]
    elif len(word)>1:
        return word[0]+cleanString(word[1:])
    return word
print cleanString("   abcd  ") == "abcd" # True
print cleanString("   abcd  ") # abcd

如果我将其更改为(I+1),请稍等,我正在运行它,并将在几天后更新minutes@pythonrookie现在就试试这个谢谢你,这真是个好办法。我真的很感谢你的帮助,你不知道你刚才帮我减轻了多少压力。s[len(s)-1]可以是s[-1],s[0:len(s)-1]可以是s[:-1],如果我将其更改为(I+1),请稍等,我正在运行它,几分钟后会更新minutes@pythonrookie现在就试试这个谢谢你,这真是个好办法。我真的很感谢你的帮助,你不知道你刚才帮我减轻了多少压力。s[len(s)-1]可以是s[-1],s[0:len(s)-1]可以是s[:-1]这似乎也不起作用。这个程序仍然是空的,不幸的是没有返回字符串。我不明白你的意思。这个程序(几乎)在我的计算机上运行,它确实返回一个字符串。也许您需要打印结果。这似乎也不起作用。这个程序仍然是空的,不幸的是没有返回字符串。我不明白你的意思。这个程序(几乎)在我的计算机上运行,它确实返回一个字符串。也许你需要打印结果。破坏帖子不是处理此类问题的方法。直接使用“联系我们”表格联系SE以删除帖子。嗨,Chris,我使用“联系我们”表格联系SE,但我需要尽快删除帖子。我被告知我必须手动删除它,因为正如我所说的,行为准则问题。我不确定如果这是我自己创建的帖子,是否可以被称为“故意破坏”,但有人告诉我必须删除它。我希望一旦SE改变了查看我的消息的方式,线程本身就会被删除。这仍然是故意破坏。当你发布问题时,你给予SE使用该帖子的权利。虽然你可以要求删除它,但不能同时破坏它。破坏帖子不是处理此类问题的方法。直接使用“联系我们”表格联系SE以删除帖子。嗨,Chris,我使用“联系我们”表格联系SE,但我需要尽快删除帖子。我被告知我必须手动删除它,因为正如我所说的,行为准则问题。我不确定如果这是我自己创建的帖子,是否可以被称为“故意破坏”,但有人告诉我必须删除它。我希望一旦SE改变了查看我的消息的方式,线程本身就会被删除。这仍然是故意破坏。当你发布问题时,你给予SE使用该帖子的权利。虽然你可以要求将其移除,但你不能同时破坏它。