1 #索引用來對單個元素進行訪問,使用分片可以對一定范圍內(nèi)的元素進行訪問,分片通過冒號相隔的兩個索引實現(xiàn)。
2 >>>number=[1,2,3,4,5,6,7,8,9,10]
3 >>>number[1:3] #取索引為第一和第二的元素
4 [2,3]
5 >>>number[-3:-1] #負數(shù)從右開始計數(shù),取得倒數(shù)第三和倒數(shù)第二的元素
6 [8,9]
7 #因此可以看出,分片既支持正數(shù)索引,也支持負數(shù)索引。
1 #分片的實現(xiàn)需要提供兩個索引作為邊界,第一個索引的元素包含在分片內(nèi),第二個索引的元素不包含在分片內(nèi)。像數(shù)學(xué)里的a≤x<b,x是我們需要得到的元素,a是分片操作中的第一個索引,b是第二個索引,b不包含在x的范圍內(nèi)。
2 >>>number=[1,2,3,4,5,6,7,8,9,,10]
3 >>>number[7:10] #取最后3個元素
4 [8,9,10]
5 >>>number[10] #超出索引范圍
6 Traceback (most recent call last):
7 File "<pyshell#31>", line 1, in <module>
8 number[10]
9 IndexError: list index out of range
10 #number的編號最大應(yīng)該為9,編號為10指向的是第11個元素,是一個不存在的元素,但是由于在最后一個元素之后,因此能得到最后一個元素
11 >>>number=[1,2,3,4,5,6,7,8,9,10]
12 >>>number[-3:-1]
13 [8,9]
14 #沒有輸出最后一個元素。再試試使用索引0作為最后一個元素的下一個元素,輸入如下:
15 >>>number[-3:0]
16 []
17 #輸出并沒有數(shù)值。分片中最左邊的索引比它右邊的索引晚出現(xiàn)在序列中,結(jié)果就是一個空序列。比如上例中,-3代表倒數(shù)第三個元素,0代表第一個元素,倒數(shù)第三個元素比第一個元素晚出現(xiàn),即排在第一個元素后面,所以得到的結(jié)果是空序列。
18 #那么我們?nèi)绾瓮ㄟ^負數(shù)索引的方式取得最后一個元素呢?要取得的分片包括序列結(jié)尾的元素,只需將第二個索引設(shè)置為空即可。輸入如下:
19 >>>number[-3:]
20 [8,9,10]
1 #正數(shù)索引亦可使用這種方法,輸入如下:
2 >>>number[0:] #從第一個元素開始輸出,輸出全部結(jié)果
3 [1,2,3,4,5,6,7,8,9,10]
4 >>>number[:0] #最后一個元素為第一個,輸出為空
5 []
6 >>>number[:3] #取得前3個元素
7 [1,2,3]
1 #根據(jù)上述輸出結(jié)果可知,若需要輸出整個序列,則可以將兩個索引都設(shè)置為空。輸入如下:
2 >>>number[:]
3 [1,2,3,4,5,6,7,8,9,10]
4 #輸出結(jié)果就是整個序列
1 #進行分片時,分片的開始和結(jié)束點都需要指定(無論是直接還是間接),用這種方式取連續(xù)的元素沒有問題,但若要取序列中不連續(xù)的元素就比較麻煩,或者直接不能操作。比如要取序列number中所有的奇數(shù),以一個序列展示出來,用前面的方法就不能實現(xiàn)了
2 #對于上面這種情況,Python為我們提供了另一個參數(shù)--步長,該參數(shù)通常是隱形設(shè)置的。在普通分片中,步長是1.分片操作就是按照這個步長逐個遍歷序列的元素,遍歷后返回開始和結(jié)束點之間的所有元素。也可以理解為默認步長是1,即沒有設(shè)置步長時,步長隱形設(shè)置值為1,輸入如下
3 >>>number[0:10:1] #設(shè)置步長值為1
4 [1,2,3,4,5,6,7,8,9,10]
5 >>>number[0:10:2] #設(shè)置步長值為2
6 [1,3,5,7,9]
7 #由上面的輸出結(jié)果可以看到,對于number序列,設(shè)置步長為2時,得到的結(jié)果就是我們前面想要的奇數(shù)序列。
1 #由結(jié)果可知,步長設(shè)置為大于1的數(shù)時,會得到一個跳過某些元素的序列。例如,我們上面設(shè)置的步長為2,得到的序列是從開始到結(jié)束每隔1個元素的序列。比如還可以這樣使用:
2 >>>number[0:10:3]
3 [1,4,7,10]
4 >>>number[2:6:3]
5 [3,6]
6 >>>number[2:5:3]
7 [3]
8 >>>number[1:5:3]
9 [2,5]
10 #由以上輸出可以看到,使用步長的方式還是很靈活的。
1 #除了上面的使用方式外,設(shè)置前面兩個索引為空的捷徑也可以使用。如下
2 >>>number[::3]
3 [1,4,7,10]
4 上面的操作將序列中每3個元素的第一個提取出,前面兩個索引都設(shè)置為空。步長設(shè)置為0是否可行呢?輸入如下:
5 >>>number[::0]
6 Traceback (most recent call last):
7 File "<pyshell#56>", line 1, in <module>
8 number[::0]
9 ValueError: slice step cannot be zero
10 輸出結(jié)果告訴我們步長不能為0.
1 步長能否設(shè)置為負數(shù)呢?輸入如下:
2 >>>number[10:0:-2]
3 [10,8,6,4,2]
4 >>>number[0:10:-2]
5 []
6 >>>number[::-2]
7 [10,8,6,4,2]
8 >>>number[5::-2]
9 [6,4,2]
10 >>>number[:5:-2]
11 [10.8]
12 >>>number[::-1]
13 [10,9,8,7,6,5,4,3,2,1]
14 >>>number[10:0:-1] #第二索引為0,取不到序列中的第一個元素
15 [10, 9, 8, 7, 6, 5, 4, 3, 2]
16 >>>number[10::-1] #設(shè)置第二個索引為空,可以去到序列的一個元素
17 [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
18 >>>number[2::-1] #設(shè)置第二個索引為空,可以去到序列的一個元素
19 [3,2,1]
20 >>>number[2:0:-1] #設(shè)置第二個索引為0,取不到序列中的第一個元素
21 [3, 2]
22 #使用負數(shù)的步長和使用正數(shù)的步長的結(jié)果是相反的。對于正數(shù)步長,Python會從序列的頭部開始向右提取元素,直到最后一個元素;對于負數(shù)步長,則是從序列的尾部開始向左提取元素,直到第一個元素,正數(shù)步長必須讓開始點小于結(jié)束點,而負數(shù)步長必須讓開始點大于結(jié)束點。
總結(jié)
以上是生活随笔為你收集整理的分片的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。