首先从原理上对切片运算进行分析:
list的切片,内部是调用__delitem__,__setitem__,__getitem__和slice函数。而slice函数又是和range函数相关的。
给切片传递的键是一个特殊的slice对象。该对象拥有可描述所请求切片方位的属性,例如:
a = [1,2,3,4,5,6 ]
x = a [1 :5 ] # x = a.__getitem__( slice (1,5, None ) )
a [1 :3 ] = [10,11,12 ]# a.__setitem__( slice (1,3, None ), [10,11,12 ] )
del a [1 :4 ]# a.__delitem__( slice (1,4, None ) )
Python 的切片功能实际上比很多程序员认为的更强大。
a= m [0 :100 :10 ] # 带步进的切片(步进值=10)
注意:步进值为step
当step > 0 时
切片从 start(含start)处开始,到end(不含end)处结束,**从左往右**,每隔(step-1)(索引之间的差仍为step,但相隔的元素是step-1个)个元素进行一次截取。
这时,start 指向的位置应该在end指向的位置的左边,否则返回值为空
当step < 0 时
切片从 start(含start)处开始,到end(不含end)处结束,**从右往左**,每隔(step-1)(索引之间的差仍为step,但相隔的元素是step-1个)个元素进行一次截取。
这时,start 指向的位置应该在end指向的位置的右边,否则返回值为空
翻转字符串,示例:
>>>str='feishuai.vip'
>>>str[::-1]
结果为:
'moc.pivjfs'
切片边界问题,示例:
s=[1,2,3,4] # S 上界为 0 下界为 4
s[-100:100] #返回 [1,2,3,4] -100超出了上界,100超出了下界:等价于 s[0:4]
s[-100:-200] #返回 [] -100,-200均超出了上界,自动取上界:等价于s[0:0]
s[100:200] #返回 [] 100,200均超出了下界,自动取下界值:等价于s[4:4]
s[:100] #返回 [1,2,3,4] 开始值省略表示从第0个开始
s[0:] #返回 [1,2,3,4] 结束值为空表示到最后一个结束
注意:示例中python版本为python2.7,python的切片存在版本兼容问题。在python3中有更加高级的功能和用法,在使用时一定要注意自己的python版本。