Python的切片是特別經常使用的功能,主要用於對列表的元素取值。使用切片也會讓你的代碼顯得特別Pythonic。bash
切片的主要聲明以下,假設如今有一個list,命名爲alist:spa
alist = [0,1,2,3,4]
複製代碼
切片語法的基本形式爲:code
alist[start:stop:step]
複製代碼
能夠看出對於列表的切片操做有三個參數,分別爲:數學
三個參數都是可選參數,意義爲list的下標,即index。step參數默認值爲1。表現形式有如下幾種:class
alist[start:stop]
alist[start:]
alist[:stop]
alist[:]
複製代碼
a[1:3]
的結果爲[1,2]
。a[1:]
會獲得[1,2,3,4]
。a[:4]
會獲得結果[0,1,2,3]
須要注意的是,:stop
表示不在選定切片中的第一個值,alist[start:stop]
的取值相似於數學中的取值範圍爲[start, stop)
, 因此在步長默認爲1的狀況下,start-stop
的結果即爲所取元素的數量。基礎
start與stop的值能夠是負值,表示取值是從list的最後開始,而不是開頭。 例如:原理
alist[-1]
alist[-3:]
alist[:-1]
複製代碼
[2,3,4]
。[0,1,2,3]
。step爲負值時候表示將列表逆向,最簡單的例子以下:語法
alist[::-1]
複製代碼
輸出結果爲[4,3,2,1,0]
。這個例子實際是如下面的這個形式返回,總結
[alist[-1], alist[-1-step], ..., alist[0]]
複製代碼
即從倒數第一個元素開始,每一步加上步長,由於這裏步長爲負數,因此是減法,直到alist的開頭。 知道這個原理,就能明白一些加上了start與stop參數的複雜寫法,例如:命名
alist[1::-1]
複製代碼
其實是這樣返回:
[alist[1], alist[1-step], ..., alist[0]]
複製代碼
所以,返回的是[1,0]
alist[:1:-1]
複製代碼
其實是這樣返回:
[alist[-1], alist[-1-step], ..., alist[stop+1]]
複製代碼
所以,返回的是[4, 3, 2]
。
注意,因爲是逆序,因此start參數應該大於stop參數。
alist[3:1:-1]
複製代碼
其實是這樣返回:
[alist[start], alist[start-step], ..., alist[stop+1]]
複製代碼
所以,返回的是[3,2]
咱們能夠看出,
切片語法的使用特別靈活,若是正確掌握了它的用法,可以簡化你的代碼。須要注意的是,Python也提供了slice類用於製造切片,例如:
alist[start:stop:step]
複製代碼
實際上等價於
alist[(slice(start,stop,step))]
複製代碼