编写一个接受由字母组成的输入字符串的函数 字符并删除字符串的所有前导空格和 不使用.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'之前很容易摆脱空格。该程序还告诉我们在实际字符串之前消除空格。根据我的逻辑,我认为它不仅消除了前导但尾随的空白区域。任何帮助将不胜感激。
答案 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:]