Discuss / Python / 求解,使用切片取元素为何不用考虑string长度为0的情况

求解,使用切片取元素为何不用考虑string长度为0的情况

Topic source

依照 @猫_波仁切 的思路

他的代码如下

def trim(s): while s[:1] == ' ': s = s[1:] while s[-1:] == ' ': s = s[:-1] return s

我使用while循环写了最初的代码,但做判断的时候没有使用切片取元素,如下

def trim(s): while s[0]==' ': s = s[1:] while s[-1]==' ': s = s[:-1] return s

然后运行的时候报【 string index out of range 】(索引越界,问题在于当string长度==0的时候,while循环里要求调用第0个或第-1个元素进行判断,但实际上string为空,不存在第0个或第-1个元素)。于是我把代码改为

def trim(s): if len(s)==0: return s else: while s[0]==' ': s = s[1:] if len(s)==0: return s while s[-1]==' ': s = s[:-1] if len(s)==0: return s return s

太特么长啦!

那么问题来了,猫_波仁切的写法 跟我最初的写法相比,只是取首尾元素进行判断时使用了切片。那么用切片取元素为何就不用考虑len(string)==0这种问题呢? 用了一个切片,代码短了一半多啊!

海涵09970

#2 Created at ... [Delete] [Delete and Lock User]

我试验了一下,发现切片操作在字符串超出索引范围时,都会自动返回一个空值‘’。比如: s = 'a' s[1:2] 这种情况下,切片超出了字符串的索引范围,返回空值‘’。 所以,在 猫—波仁切 的代码里,当输入为空的字符串时,s[:1]和s[-1:]都返回空值‘’,循环自动跳过,直接返回空字符串s,因此不会报“索引越界”的错误。


  • 1

Reply