删除Python字符串中的空格

时间:2015-11-24 06:02:03

标签: python

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

例如, 'Hello to the world'将以'Hello to the world'的形式返回

我们不允许使用split命令,或除基本字符串运算符(长度和连接)以及if和while命令之外的任何命令。

我编写了我的程序,以便删除字符串开头的空格以及单词之间的额外空格,但是,如果输入字符串中的最后一个单词后面甚至有一个空格,则程序返回错误“index [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)

希望有人可以帮我确定它有什么问题。好像我已经尝试了一切,但我知道这只是我对python的经验不足。

5 个答案:

答案 0 :(得分:2)

实际上有一个简单而聪明的修复方法。变化

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

为...

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

这是有效的,因为如果在任何点遇到假值,Python会短路and。这意味着在i<len(s)评估为False并且Python遇到and之后,如果有elifelse条款,它将立即转到IndexErrorDownloadManager.COLUMN_TITLE 条款。因此,永远不会评估后半部分,因此没有sub('(?<=\\d)-(?=\\d)', '$', a, perl=TRUE) #[1] "1" "1.5" "-2" "3$4.5" "-1" "5$7.5" "3"

现在,这个程序并不完美。 其他问题,但由于这是一项家庭作业,我不愿意提供更多帮助。除了这个提示:你需要另一个while循环。

答案 1 :(得分:1)

您需要在另外一个地方检查您的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)

答案 2 :(得分: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)

改变的是:

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

要:

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

但是这会在最后留下一个空间,所以

if s[-1] == ' ':
            s = s[:-1]

享受。

答案 3 :(得分:1)

这似乎工作得很好。 看看这个。 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 '))

答案 4 :(得分:1)

使用一些递归

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