如何在不使用strip()函数的情况下删除或去除空格?

时间:2016-02-22 10:55:42

标签: python python-3.x

  

编写一个接受由字母组成的输入字符串的函数   字符并删除字符串的所有前导空格和   不使用.strip()返回它。例如,如果:

     

input_string =“Hello”

     

然后你的函数应该返回一个字符串,如:

     

output_string =“你好”

以下是我的程序,用于在不使用条带的情况下删除空格:

def Leading_White_Space (input_str):
    length = len(input_str)
    i = 0
    while (length):
        if(input_str[i] == " "):
            input_str.remove()
        i =+ 1
        length -= 1


#Main Program
input_str = "    Hello    "
result = Leading_White_Space (input_str)
print (result)

我选择了删除功能,因为在字符串'Hello'之前很容易摆脱空格。该程序还告诉我们在实际字符串之前消除空格。根据我的逻辑,我认为它不仅消除了前导但尾随的空白区域。任何帮助将不胜感激。

5 个答案:

答案 0 :(得分:3)

您可以遍历字符串的字符,并在到达非空格字符时停止。这是一个解决方案:

def Leading_White_Space(input_str):
  for i, c in enumerate(input_str):
    if c != ' ':
      return input_str[i:]

修改: @PM 2Ring提到了一个好点。如果要处理所有类型的空格(例如 \ t,\ n,\ r \ n),则需要使用isspace(),因此正确的解决方案可能是:

def Leading_White_Space(input_str):
  for i, c in enumerate(input_str):
    if not c.isspace():
      return input_str[i:]

答案 1 :(得分:3)

这是另一种去除前导空格的方法,它实际上剥离了所有前导空格,而不仅仅是' '空格字符。没有必要打扰跟踪字符串中字符的索引,我们只需要一个标志来告诉我们何时停止检查空格。

def my_lstrip(input_str):
    leading = True
    for ch in input_str:
        if leading:
            # All the chars read so far have been whitespace
            if not ch.isspace():
                # The leading whitespace is finished
                leading = False
                # Start saving chars
                result = ch
        else:
            # We're past the whitespace, copy everything
            result += ch
    return result

# test
input_str = " \n \t Hello    "
result = my_lstrip(input_str)
print(repr(result))

<强>输出

'Hello    '

还有其他各种方法可以做到这一点。当然,在一个真正的程序中,你只需使用字符串.lstrip方法,但这里有几种可爱的方法来使用迭代器:

def my_lstrip(input_str):
    it = iter(input_str)
    for ch in it:
        if not ch.isspace():
            break
    return ch + ''.join(it)

def my_lstrip(input_str):
    it = iter(input_str)
    ch = next(it)
    while ch.isspace():
        ch = next(it)
    return ch + ''.join(it)

答案 2 :(得分:1)

使用re.sub

>>> input_string = " Hello "
>>> re.sub(r'^\s+', '', input_string)
'Hello '

>>> def remove_space(s):
    ind = 0
    for i,j in enumerate(s):
        if j != ' ':
            ind = i
            break
    return s[ind:]

>>> remove_space(input_string)
'Hello '
>>> 

答案 3 :(得分:0)

为了彻底而不使用其他模块,我们还可以指定要删除的空格(前导,尾随,两者或全部),包括制表符和换行符。我使用的代码(由于显而易见的原因,比其他答案更紧凑)如下所示并使用切片:

#header{
    background: white;
    box-shadow: 0 0 15px rgb(0,0,0);
    box-shadow: 0 0 15px rgba(0,0,0,0.3);
    position: absolute;
    z-index: 50;
    width: 100%;
}
.verticalcenter{
    width: 100%;
    margin: 0 auto;
}
#logo{
    width: 25%;
    height: 150px;
    box-shadow: 0 0 15px rgb(0,0,0);
    box-shadow: 0 0 15px rgba(0,0,0,0.3);
    display: inline-block;
    zoom: 1;
    vertical-align: top;
    min-width: 220px;
}

#menu{
    width: 75%;
    display: inline-block;
    zoom: 1;
    vertical-align: top;
}

.wrap {
    float:right;
    width:75%;
}

答案 4 :(得分:0)

您可以使用itertools.dropwhile从字符串开头删除所有特定字符,如下所示

import itertools

def my_lstrip(input_str,remove=" \n\t"):
    return "".join( itertools.dropwhile(lambda x:x in remove,input_str))

为了使其更灵活,我添加了一个名为remove的附加参数,它们表示要从字符串中删除的字符,默认值为" \n\t",然后使用dropwhile它将忽略所有删除的字符,检查这个我使用lambda函数(这是一种写短匿名函数的实用形式)

这里有一些测试

>>> my_lstrip(" \n \t Hello    ")
'Hello    '
>>> my_lstrip("   Hello    ")
'Hello    '
>>> my_lstrip(" \n \t Hello    ")
'Hello    '
>>> my_lstrip("---   Hello    ","-")
'   Hello    '
>>> my_lstrip("---   Hello    ","- ")
'Hello    '
>>> my_lstrip("- - - Hello    ","- ")
'Hello    '
>>> 

上一个功能相当于

def my_lstrip(input_str,remove=" \n\t"):
    i=0
    for i,x in enumerate(input_str):
        if x not in remove:
            break
    return input_str[i:]