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