适用对象
切片操作适用于序列类型对象:list、tuple、string
这些对象都类似于c语言的数组,可以通过下标访问对象中的元素,但是有一点不一样,这个下标在python中是可以取负数的,如下:

其中:正值是从左到右,范围[0, n-1];负值是从右到左,范围[-1, -n];
即str[0] == str[-11]
切片操作
切片操作由[]
以及三个参数组成,三个参数由:
分隔,如下
[start:end:step]
常用操作
start,end,step默认情况下取正值,当start>=end时,结果为空
- 获取元素的范围:[start, end),即左闭右开,也即元素中不包含end下标对应的元素
- 三个参数都可以省略
- start默认是0
- end默认是n
- step默认是1,表示每隔step取一个元素
>>> str[0:11:1]
'hello world'
>>> str[0:11:]
'hello world'
>>> str[:11:]
'hello world'
>>> str[::]
'hello world'
>>> str[::2]
'hlowrd'
>>>
复杂操作
start,end,step三个参数也可以取负值,并且正负还可以混用,如下
>>> str[::-1]
'dlrow olleh'
>>> str[-11::-1]
'h'
>>> str[-11:-1:1]
'hello worl'
>>> str[-12:-1:1]
'hello worl'
>>> str[0:-1:1]
'hello worl'
>>> str[0:-1:-1]
''
>>>
使用原则
看上面的操作是不是感觉很乱,确实,这就是更多的自由带来的烦恼,就像c语言的指针操作
但是如果能掌握其使用的原则,一般是可以避免混乱造成的错误
- 当
start < end
时表示从左往右取,这个时候step要为(正)才能正常取元素 - 当
start > end
时表示从右往左取,这个时候step要为(负)才能正常取元素
>>> str[0:10:2]
'hlowr'
>>> str[0:10:-2]
''
>>> str[-11:-1:-2]
''
>>> str[-11:-1:2]
'hlowr'
>>> str[0:-1:2]
'hlowr'
>>> str[0:-1:-2]
''
>>>
- 当
star
、end
省略时,取元素的方向由step决定
>>> str[0::-1]
'h'
>>> str[0::1]
'hello world'
>>> str[:0:1]
''
>>> str[:0:-1]
'dlrow olle'
>>>
网友评论