簡介
大多數(shù)的編程語言都支持使用索引來訪問數(shù)組的元素,像這樣:
array = range(10)
print(array[1])
#輸出:1
然而在Python中,使用切片(Slice)的操作可以對數(shù)組進行更豐富的操作。
用例
1. 負號
大多數(shù)的編程語言都只支持正數(shù)的索引來訪問數(shù)組元素,在Python中,還能使用負數(shù)來訪問:
print(array[-1]) #輸出:9
print(array[-2]) #輸出:8
從這個結(jié)果可以看出,如果索引為負數(shù)時,從數(shù)組中取元素的順序是從右向左取的,索引對應(yīng)元素可以表示為:
+---+---+---+---+---+---+
| P | y | t | h | o | n |
+---+---+---+---+---+---+
0 1 2 3 4 5 6
-6 -5 -4 -3 -2 -1
2. 冒號
完整的使用冒號切片的表達式是這樣的:
array[ start : end : step ]
start
表示起始的索引(包含),默認值為0
end
表示結(jié)束的索引(不包含),默認值為數(shù)組總長度
step
步長,默認為1, 不能為0
用例:
print(array[1:]) # 輸出:[1, 2, 3, 4, 5, 6, 7, 8, 9] 從索引1開始,到最后一個元素,步長使用默認值1
print(array[:3]) # 輸出:[0, 1, 2] 從索引0開始,到索引2的元素,步長使用默認值1
print(array[::3]) # 輸出:[0, 3, 6, 9] 從索引開始,到最后一個元素,步長為3
print(array[4:-13]) # 輸出:[] 結(jié)束的索引超出范圍,返回空數(shù)組
print(array[::-1]) # 輸出:[9, 8, 7, 6, 5, 4, 3, 2, 1, 0] 步長為-1,相當于將這個數(shù)組倒序排列
print(array[::-2]) # 輸出:[9, 7, 5, 3, 1] 步長為-2,從最后一個元素開始,每兩個取一次元素
print(array[::0]) # 報錯,步長不能為0
print(array[::11]) # 輸出:[0] 從索引0開始取元素,加上步長后超過索引范圍,只返回一個元素
print(array[::-11]) # 輸出:[9] 從索引9開始取元素,減去步長后超過索引范圍,只返回一個元素
print(array[:]) # 輸出:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 相當于復(fù)制原數(shù)組
總結(jié)
使用切片,可以快速靈活的拆分數(shù)組,很多需要循環(huán)的地方,只用一行代碼就搞定了,非常簡潔肯污。
參考
廖雪峰Python教程 - 切片
stackoverflow - Understanding Python's slice notation
分析python切片原理和方法