先說結論:
列表切片的格式為[start: end: step]
其中 step 代表步長,即每從 start 位置開始每隔幾個元素取一個值
-
step 為正數時表示切片取值方向為:從左往右;為負數時:從右往左
-
start, end 代表切片取值的起始和結束位置,請注意這個詞:位置,我們假設可以取值的範圍是數學中 x 座標軸上的所有值,不管 start, end 它們是正數還是負數,都沒有關係,它們只代表切片的區間位置而已!順著取值方向(由 step 控制),start 的在 x座標軸上的位置應該在 end 的位置之前,否則會取不到值(譬如 step 是正數,start < end。step 為負數,start > end)
現有列表:[0,1,2,3,4,5,6,7,8,9,10]
列表元素 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|---|
正向索引 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
逆向索引 | -11 | -10 | -9 | -8 | -7 | -6 | -5 | -4 | -3 | -2 | -1 |
注意:上面逆向索引的初始索引,從 -1 開始
切片格式:list[start: end: step]
-
start: 開始位置的索引,不寫預設為列表的開頭,即索引0
-
end: 結束位置的索引,不寫預設為列表的末尾
-
step: 步長,即每個幾個元素取一個值,不寫則預設為1; 當step為正數,取值方向從左往右,當step為負數,取值方向從右往左
1.左閉右開區間
列表的切片是左閉右開區間,取值時不包含 end 索引的值:
>>> a = [0,1,2,3,4,5,6,7,8,9,10]
>>> a[0:9] # 從0開始,取值到索引9.
[0, 1, 2, 3, 4, 5, 6, 7, 8] # 但是注意:只能取值到 8,不包含索引為 9 的值
2.忽略 start 或 end
忽略 start ,則預設從索引0開始;忽略 end 位置,則截止到最後一個元素
>>> a[:]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # 忽略start,則起始位置為開頭;忽略end,到最後結束;
# 注意:忽略 end 可以獲取列表末尾的值,不會出現左閉右開區間的問題
3.step 不為1的情況
如step=2,則每從 start 開始,從左往右每隔 2 個元素取一個值
>>> a[0:9:2]
[0, 2, 4, 6, 8]
4.start,end 是正數還是負數,都無所謂!它們只代表起始和結束的位置, 僅此而已!
譬如下面的例子,兩者等同
>>> a[-4:-1] # 逆向的索引 [-4:-1],等同於正向的索引 [7:10]
[7, 8, 9]
>>> a[7:10]
[7, 8, 9]
5.起始位置在結束位置之後
如下面的例子,step 預設為1,取值方向從左往右;此時如果 start 在 end 位置的右邊,就取不到值
>>> a[8:0]
[]
>>> a[-2:-10]
[]
>>> a[-2:-2] # start = end,相當於原地踏步,也獲取不到值
[]
6.step 負數,從右往左開始取值,如果 start 在 end 左邊,同樣也取不到值
>>> a[::-1]
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0] # 取值方向反了
#學習中遇到問題沒人解答?小編建立了一個Python學習交流群:153708845
>>> a[8:0] # step為正數,從左往右取值,此時start在end右邊,取不到值
[]
>>> a[8:0:-1] # step負數,從右往左取值,此時start在end右邊,就能取到值了
[8, 7, 6, 5, 4, 3, 2, 1]
>>> a[-2:0:-2] # -2的正向索引是9,相當於 a[9:0:-2]
[9, 7, 5, 3, 1]
>>> a[0:9:-1] # 此時取值方向是從右往左,但是 0 在 9 左邊,起始位置在結束位置之後,故取不到值
[]
擴充套件: range(start,stop,step)
python中的 range(start,stop,step) 也同理:
>>> list(range(1,20,-1))
[]
>>> list(range(20,1,-1))
[20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2]
>>> list(range(-1,-20,-1))
[-1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -14, -15, -16, -17, -18, -19]