如何删除python中的尾随空格?

时间:2016-02-22 12:49:28

标签: python python-3.x

  

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

     

input_string ="您好"

     

那么你的函数应该返回一个输出字符串,例如:        output_string ="你好"

这是我的代码:

def Trailing_White_Space (input_str):

    count = 0
    for i in range (len(input_str) + 1, 0):
        if (input_str[i] != ' '):
            count = i
            break
    new_s = input_str[len(input_str):count]
    return (new_s)

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

我确信逻辑是正确的。我已经用可能的测试用例运行代码。我的代码仍然没有给出任何输出。请帮忙。

7 个答案:

答案 0 :(得分:3)

以下是您遇到问题的主要原因:

input_str[len(input_str):count]

如果切片len(input_str)开始,那么你根本不会得到任何字符。您只需使用[:count],但您还没有正确获得count

为了从结尾循环,你必须使用范围的第三个参数来减少你的值,所以它必须是

for i in range(len(input_str) - 1, -1, -1):

你想要-1,每次减少一个值。您还希望从len-1开始,否则您将获得无效索引,如果您希望结束为0,则需要传递-1,因为范围不会转到结束值。

现在,您可以正确使用count和切片input_str

return input_str[:count]

答案 1 :(得分:3)

如果你想看到一个单行答案。就是这样:

from string import whitespace as ws
def remove_trailing_whitespace(t):
    return t[:-next(i for i, c in enumerate(t[::-1]) if c not in ws)]

示例:

>>> print '"{}"'.format(remove_trailing_whitespace('  hello  '))  # spaces
"  hello"
>>> print '"{}"'.format(remove_trailing_whitespace('  hello\n'))  # newline
"  hello"
>>> print '"{}"'.format(remove_trailing_whitespace('  hello\t'))  # tab
"  hello"
>>> print '"{}"'.format(remove_trailing_whitespace('  hello \t\n '))  # space, newline, tab
"  hello"

奖励:所有空白字符,而不仅仅是空间和最佳效率。

答案 2 :(得分:2)

更正指定new_s变量的行。

new_s = input_str[:count+1]

此外,由于您的循环需要在每次迭代后递减。将0替换为-1

for i in range(len(input_str)-1, -1, -1):

编辑:请参阅@InbarRose's answer以获得更好的选择。

答案 3 :(得分:1)

尝试使用re.sub()

import re

def remove(my_string):
    new_string = re.sub(r'(.*?\w)([ \t\n\r]*)', r'\1', my_string)
    return(new_string)

my_string = str(input())
modified = remove(my_string)
print(modified)

<强>解释

re是python中用于正则表达式的模块。

re.sub(pattern, replacing_pattern, string_to_be_modified)是语法。

此处,方括号中的任何字符(\w - &gt;任意字符, - &gt;空格,\t - &gt;标签,\n - &gt ;遇到替换为\r(Nothing)时,换行符,'' - &gt;回车符。因此你得到一个剥离的字符串。

查找所有正则表达式匹配here

答案 4 :(得分:0)

默认情况下

range()会上升。如果您希望它反向运行,则必须明确设置该步骤。另外,您不想从len(input_str) + 开始1.您想从len(input_str) 开始 - 1.对于任何可迭代的,x,x[len(x)]未定义。 x[len(x) + 1]甚至更远。要获取最后一个元素,您应该使用len(input_str) - 1。此外,如果将第二个数字设置为0,则不会评估第一个元素。 range()的第二个参数是独占,所以你应该比你想象的更远一个数字:

def Trailing...
    count = 0
    for i in range(len(input_str) - 1, -1, -1):
    ...

答案 5 :(得分:0)

使用while循环:

my_str = ' hello   '
while len(my_str) > 0 and my_str[-1] == ' ':
    my_str = my_str[:-1]

print(my_str) # prints: ' hello'

答案 6 :(得分:-6)

你的循环没有通过。你必须指明它正在递减。以下是工作代码。

DISTINCT