Python基础之索引与切片
从廖雪峰老师的Python教程中的题目引发了我对于字符串切片和索引的思考。
题目:
利用切片操作,实现一个trim()函数,去除字符串首尾的空格,注意不要调用str的strip()方法:
# -*- coding: utf-8 -*-
def trim(s):
##########
##填写内容
##########
# 测试:
if trim('hello ') != 'hello':
print('测试失败!')
elif trim(' hello') != 'hello':
print('测试失败!')
elif trim(' hello ') != 'hello':
print('测试失败!')
elif trim(' hello world ') != 'hello world':
print('测试失败!')
elif trim('') != '':
print('测试失败!')
elif trim(' ') != '':
print('测试失败!')
else:
print('测试成功!')
错误:
def trim(s):
while (s[0] == ' '):
s = s[1:]
while (s[-1] == ' '):
s = s[:-1]
return s
#
#Traceback (most recent call last):
# File "/app/main.py", line 18, in <module>
# elif trim('') != '':
# File "/app/main.py", line 3, in trim
# while (s[0] == ' '):
#IndexError: string index out of range
正确:
def trim(s):
while (s[:1] == ' '):
s = s[1:]
while (s[-1:] == ' '):
s = s[:-1]
return s
字符串,元祖,列表的索引和切片是相同的,因为他们都是序列。
Python 能够处理没有意义的切片:当切片范围超出序列的实际长度,只取切片的有效部分,没有有效部分就返回空序列。
示例:
>>> a = [1,2,3]
>>> a[1:23]
[2, 3]
>>> a[20:100]
[]
但是索引如果无效就会报错
>>> a[8]
IndexError: list index out of range
所以对于空序列,也是同样的道理:即使切片无效也没有关系,因为会返回空序列,而索引则会报错。
>>> a = []
>>> a[0:1]
[]
因而要选择通过切片去除字符串首尾的空格,而非索引。
另:关于切片:
对于s[a,b,c]:
a可以取到;b不可以取到;c为步长,可正可负
步长c为正时从a开始向右一直到b;步长c为负时从a开始向左一直到b
s = '0123456789'
for a in s[0:4:-2]:
print(a, end=' ')
结果为
解释:s[0:4:-2]表示切片从0开始,步长为2方向从右到左,一直到4。由于不合法,所以为空
s = '0123456789'
for a in s[4:0:-2]:
print(a, end=' ')
结果为4 2
解释:s[4:0:-2]表示切片从4开始,步长为2方向从右到左,一直到0。
s = '0123456789'
for a in s[0:4:2]:
print(a, end=' ')
结果为0 2
解释:s[0:4:2]表示切片从0开始,步长为2方向从左到右,一直到4。

浙公网安备 33010602011771号