Python知識(shí)分享網(wǎng) - 專業(yè)的Python學(xué)習(xí)網(wǎng)站 學(xué)Python,上Python222
Python中的切片slice 知識(shí)詳解
匿名網(wǎng)友發(fā)布于:2023-07-20 11:12:42
(侵權(quán)舉報(bào))

Python中的切片知識(shí).


在Python中,切片(slice)是對(duì)序列型對(duì)象(如list, string, tuple)的一種高級(jí)索引方法。 普通索引只取出序列中 一個(gè)下標(biāo) 對(duì)應(yīng)的元素,而切片取出序列中 一個(gè)范圍 對(duì)應(yīng)的元素,這里的范圍不是狹義上的連續(xù)片段。通俗一點(diǎn)就是在一定范圍里面.用刀切出一部分,達(dá)到自己需要的一部分.

一、切片的索引方式

以 a = [ 1,2,3,4,5,6,7,8,9] 為例,正索引和負(fù)索引


Python中的切片slice 知識(shí)詳解 圖1

 

二、索引的一般方式

一個(gè)完整的切片是包含三個(gè)參數(shù)和兩個(gè)冒號(hào)" : " ,用于分隔三個(gè)參數(shù)(start_index、end_index、step)。當(dāng)只有一個(gè)“:”時(shí),默認(rèn)第三個(gè)參數(shù)step=1;當(dāng)一個(gè)“:”也沒(méi)有時(shí),start_index=end_index,表示切取start_index指定的那個(gè)元素。
 

切片操作的基本表達(dá)式:object[start:end:step]

 

start:切片的起始位置,如果沒(méi)有值的話從頭開始.
end:切片的結(jié)束位置,但不包含end(前閉后開),如果沒(méi)有值的話表示切割到結(jié)束為止.
step:步長(zhǎng),默認(rèn)取值為1,如果步長(zhǎng)為正數(shù)的情況表示從左往右,反正若為負(fù)數(shù)則表示從右往左. step的正負(fù)決定切的方向,這一點(diǎn)需要尤為注意!!!

 

三、 切片操作的 詳細(xì)切法

 

1.切割單個(gè)值
 

>> a = [1,2,3,4,5,6]
>>> a[0] ##單個(gè)數(shù),代表位數(shù),第0位就是a里面的第一位
1
>>> a[5]##a里面的第5位,注意要從0作為第一位開始數(shù)
6

 

2.切割完整對(duì)象

 

>>> b=[6,3,6,7,8,2,5,4]
>>> b[:] ##單獨(dú)一個(gè)冒號(hào),代表從頭取到尾,步長(zhǎng)默認(rèn)為1
[6, 3, 6, 7, 8, 2, 5, 4]
>>> b[::]##單獨(dú)兩個(gè)冒號(hào)一樣代表從頭取到尾,步長(zhǎng)默認(rèn)為1
[6, 3, 6, 7, 8, 2, 5, 4]
>>> b[::-1]##注意,兩個(gè)冒號(hào)后面是步長(zhǎng),步長(zhǎng)為1,故應(yīng)從右往左取
[4, 5, 2, 8, 7, 6, 3, 6]

 

3.當(dāng)start和end全部為正數(shù)時(shí).

 

>>> a 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
>>> a[1:6] ##默認(rèn)步長(zhǎng)為1,從左往右,注意前閉后開
[1, 2, 3, 4, 5] 
>>> a[1:6:-1] 
[] ## 當(dāng)取值的大小方向與步長(zhǎng)的方向沖突時(shí),返回值是空.
>>> a[6:1:-1] 
[6, 5, 4, 3, 2] 
>>> a[:6] ## 沒(méi)有star代表從頭開始取
[0, 1, 2, 3, 4, 5] 
>>> a[:6:-1] 
[9, 8, 7] 
>>> a[6:] 
[6, 7, 8, 9] 
>>> a[6::-1] 
[6, 5, 4, 3, 2, 1, 0] 

 

4.當(dāng)start和end全部取負(fù)數(shù)的時(shí).

 

>>> a 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
>>> a[:-6] ## -6意思是從右往左數(shù)的第六位,故第六位是4,然后默認(rèn)步長(zhǎng)為1(從右往左),star未寫,故從頭開始取到4
[0, 1, 2, 3] 
>>> a[-1:-6] 
[]
>>> a[-1:-6:-1] 
[9, 8, 7, 6, 5] 
>>> a[-6:-1] ## 這個(gè)是從-6取到-1,步長(zhǎng)為1,意思是從右往左數(shù)第6位到從右往左的第一位
[4, 5, 6, 7, 8] 
>>> a[:-6:-1] ## 這個(gè)是從0取到-6,步長(zhǎng)為-1,因?yàn)殚_頭是冒號(hào),故起點(diǎn)被隱藏了
[9, 8, 7, 6, 5] 
>>> a[-6:] 
[4, 5, 6, 7, 8, 9] 
>>> a[-6::-1] ## 注意這個(gè)不等于[-6:-1],區(qū)別是這里是::(兩個(gè)冒號(hào)),兩個(gè)冒號(hào)后連接的是步長(zhǎng)
[4, 3, 2, 1, 0]

 

5.start和end是正負(fù)混合情況時(shí)

 

>>> a 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
>>> a[1:-6] 
[1, 2, 3] 
>>> a[1:-6:-1] 
[]
>>> a[-1:6] 
[]
>>> a[-1:6:-1] 
[9, 8, 7] 

 

6.連續(xù)的切片操作

 

>>> a 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
>>> a[:8][2:5][-1:] ## [:8]就是0取到8,在從其中取2到5,最后取-1位
[4] 
a[:8] ---- [0,1,2,3,4,5,6,7] 
[0,1,2,3,4,5,6,7][2:5]----[2,3,4] 
[2,3,4][-1:] ----[4] 

 

7.切片中的三個(gè)參數(shù)為表達(dá)式

 

>>> a 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
>>> a[1+2:2*3:7%2]  ## 思路一樣,運(yùn)算出來(lái),繼續(xù)切
[3, 4, 5] 

 

8.切片可以操作其他的對(duì)象

 

>>> t = (1,2,3,4,5) 
>>> t[1:3] 
(2, 3) 
>>> s = "ACDRF" ##切片在字母上也是可以使用的,所以說(shuō)切片很強(qiáng)大
>>> s[1:3] 
'CD' 
>>> (0, 1, 2, 3, 4, 5)[:3]#元組的切片操作
>>> (0, 1, 2)
>>> for i in range(0,100): 
... print(i) 
... 
>>> for i in range(0,100)[2::3][-10:]: ## 意思是從第二位開始取,步長(zhǎng)為3,[-10]則是從倒數(shù)10位開始取,意思是去末尾10位.
... print(i) 
... 
71
74
77
80
83
86
89
92
95
98

  

總結(jié):

? 1.如果進(jìn)行切片操作的時(shí)候,超出下標(biāo)不會(huì)報(bào)錯(cuò)

? 2.如果切片操作的時(shí)候方向相互矛盾的話,不會(huì)報(bào)錯(cuò),返回為空

? 3.在python中進(jìn)行反向輸出列表

? 第一種: 循環(huán) 第二種 :[::-1] 第三種:reverse()

 

 

轉(zhuǎn)載自:https://blog.csdn.net/Zombie_QP/article/details/125063501