python切片详解


先从原理上分析切片运算:

list的切片,内部是调用__getitem__,__setitem__,__delitem__和slice函数。而slice函数又是和range()函数相关的。

给切片传递的键是一个特殊的slice对象。该对象拥有可描述所请求切片方位的属性,例如:

1
2
3
4
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 的切片功能实际上比很多程序员认为的更强大。

1
=  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指向的位置的右边,否则返回值为空

 

有一个经典应用是:翻转字符串

比如:

1
2
>>>  str = 'pythontab.com'
>>>  str [:: - 1 ]

结果为:

'moc.batnohtyp'

 

切片边界问题

 

实例:

1
2
3
4
5
6
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版本。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM