嗨,我是Python的新手,正试图实现使用删除两端空白的功能。
trim_1()
工作正常,但是使用trim_2()
时出现此错误:
IndexError: string index out of range
那么s[:1]
和s[0]
是不是同一个人?为什么s[:1]
有效而s[0]
无效?
任何人都可以对此有所了解吗?
def trim_1(s) :
while s[:1] == ' ':
s= s[1:]
while s[-1:] == ' ':
s= s[:-1]
return s
def trim_2(s) :
while s[0] == ' ':
s= s[1:]
while s[-1] == ' ':
s= s[:-1]
return s
答案 0 :(得分:1)
这是因为Python可以容忍片的越界索引,而不能容忍列表/字符串本身的越界索引,如下所示:
>>> ''[:1] # works even though the string does not have an index 0
''
>>> ''[0]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: string index out of range
答案 1 :(得分:1)
如果您要求一个特定的索引,那么您就是在告诉计算机您的代码需要该值继续。因此,在指定的索引处必须有一个元素,否则您将看到错误。使用此方法时,通常的做法是先进行检查,例如:
value = None
if len(s) > 0:
value = s[0] # if index 0 doesn't exist, and error will be thrown
如果您要的是这样的开放式“切片”,那么您就告诉计算机要在指定范围内的所有所有元素。程序员将需要处理可能的结果:不存在任何元素,存在1个元素,存在多个元素。
values = s[:0] # returns variable number of elements
if len(values) == 0:
...
elif len(values) > 0:
...
这两种方法都有其用途。请记住,程序员在控制之中。这些都是可以用来解决问题的工具。每个选项都带有必须处理的不同边缘情况。请记住,每种情况都有一个或两个适当的数据结构。如果您使用的是不合适的代码,例如将对象属性放入数组而不是使用类,则您的代码将显得笨拙和丑陋。只是要记住一点。这样的东西随着您的经验越来越丰富才有意义。希望有帮助!
答案 2 :(得分:0)
您尝试过-
sentence = ' hello apple '
sentence.strip()