切片的語法表達式為:[start_index : end_index : step]
start_index表示起始索引,end_index表示結束索引,step表示步長,步長不能為0,且默認值為1
切片操作是指按照步長,截取從起始索引到結束索引,但不包含結束索引(也就是結束索引減1)的所有元素。
python也提供slice函數實現切片對象,主要用在切片操作函數里的參數傳遞:[slice(start, stop, step)]
切片不會改變原對象,而是重新生成了一個新的對象
1 >>> C = ['A','B','C','D','E','F'] 2 >>> C[0:4:1] # list的切片 3 ['A', 'B', 'C', 'D'] 4 >>> C[slice(1,4,1)] # 切片函數slice() 5 ['B', 'C', 'D'] 6 >>> C = "ABCDEF" 7 >>> C[0:4:1] # str的切片(同list) 8 "ABCD" 9 >>> C[slice(1,5,2)] 10 "BD"
省略start_index
,保留end_index
,這樣會從第一個元素開始,切到end_index - 1
的元素為止
1 >>> C[:5] 2 ['A', 'B', 'C', 'D', 'E']
保留start_index
,但省略end_index
,這樣會從起始索引開始,切到最后一個元素為止:
1 >>> C[2:] 2 ['C', 'D', 'E', 'F']
省略start_index
、end_index
和step
,這樣就表示就表示切片整個序列,也就是復制出了一個新的序列:
1 >>> C[:] 2 ['A', 'B', 'C', 'D', 'E', 'F']
省略start_index
、end_index
,但保留step
,表示對整個序列,按照步長整除的規則取值:
1 >>> C[::2] 2 ['A', 'C', 'E']
此時,如果我們將步長設為-1
,那么就可以很方便的得到一個反序的序列了:
1 >>> C[::-1] 2 ['F', 'E', 'D', 'C', 'B', 'A']
只要起始值start_index
到結束值end_index
在step方向中間有值,就有返回值:
1 C = ['A','B','C','D','E','F'] 2 # 下面這四種表達式是等價的: 3 >>> C[0:3] 4 ['A', 'B', 'C'] 5 >>> C[0:-3] 6 ['A', 'B', 'C'] 7 >>> C[-6:3] 8 ['A', 'B', 'C'] 9 >>> C[-6:-3] 10 ['A', 'B', 'C']
解釋:c[0:-3]等價於c[A:D:1],c[-6:3]等價於c[0:3:1]
切片時,一定要保證start_index
到end_index
的方向與步長step
的方向同向,否則會切出空的序列:
1 >>> C[0:3:-1] 2 [] 3 >>> C[3:0:1] 4 []