Python中切片的詳細(xì)操作篇
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ù)索引
二、索引的一般方式
一個(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)有值的話從頭開(kāi)始.
end:切片的結(jié)束位置,但不包含end(前閉后開(kāi)),如果沒(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作為第一位開(kāi)始數(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,從左往右,注意前閉后開(kāi) [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代表從頭開(kāi)始取 [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未寫(xiě),故從頭開(kāi)始取到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)殚_(kāi)頭是冒號(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:]: ## 意思是從第二位開(kāi)始取,步長(zhǎng)為3,[-10]則是從倒數(shù)10位開(kāi)始取,意思是去末尾10位. ... print(i) ... 71 74 77 80 83 86 89 92 95 98
補(bǔ)充:擴(kuò)展切片
早期的Python解釋器僅支持上述a[start:stop]形式的基本切片,后來(lái)加入了下面要介紹的切片形式,擴(kuò)展切片的名稱也流傳下來(lái),實(shí)際上不用擔(dān)心,這早已是Python所支持的標(biāo)準(zhǔn)語(yǔ)法。
擴(kuò)展切片指的是這樣的切片形式:a[start:stop:step],其中step是一個(gè)非零整數(shù),即比簡(jiǎn)單切片多了調(diào)整步長(zhǎng)的功能,此時(shí)切片的行為可概括為:從start對(duì)應(yīng)的位置出發(fā),以step為步長(zhǎng)索引序列,直至越過(guò)stop對(duì)應(yīng)的位置,且不包括stop本身。事實(shí)上,簡(jiǎn)單切片就是step=1的擴(kuò)展切片的特殊情況。需要詳細(xì)解釋的是step分別為正數(shù)和負(fù)數(shù)的兩種情況。
step為正數(shù)
當(dāng)step為正數(shù)時(shí),切片行為很容易理解,start和stop的截?cái)嗪腿笔∫?guī)則也與簡(jiǎn)單切片完全一致:
>>> a [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> a[0:6:2] [0, 2, 4] >>> a[::2] [0, 2, 4, 6, 8] >>> a[:-2:2] [0, 2, 4, 6] >>> a[4::2] [4, 6, 8]
step為負(fù)數(shù)
當(dāng)step為負(fù)數(shù)時(shí),切片將其解釋為從start出發(fā)以步長(zhǎng)|step|逆序索引序列,此時(shí),start和stop的截?cái)嘁廊蛔裱笆鲆?guī)則,但缺省發(fā)生一點(diǎn)變化,因?yàn)槲覀冋f(shuō)過(guò),在缺省的情況下,Python的行為是盡可能取最大區(qū)間,此時(shí)訪問(wèn)是逆序的,start應(yīng)盡量取大,stop應(yīng)盡量取小,才能保證區(qū)間最大,因此:
按照擴(kuò)充索引范圍的觀點(diǎn), start的缺省值是 無(wú)窮大(?), stop的缺省值是 無(wú)窮小(?)
>>> a [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> a[5::-1] [5, 4, 3, 2, 1, 0] >>> a[:4:-2] [9, 7, 5] >>> a[::-1] [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
總結(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()
到此這篇關(guān)于Python中切片詳細(xì)操作的文章就介紹到這了,更多相關(guān)Python切片操作內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Django框架的中的setting.py文件說(shuō)明詳解
這篇文章主要介紹了Django框架的中的setting.py文件說(shuō)明詳解,這個(gè)文件包含了所有有關(guān)這個(gè)Django項(xiàng)目的配置信息,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-10-10Python PyQt5學(xué)習(xí)之樣式設(shè)置詳解
這篇文章主要為大家詳細(xì)介紹了Python PyQt5中樣式設(shè)置的相關(guān)資料,例如為標(biāo)簽添加背景圖片、為按鈕添加背景圖片、設(shè)置窗口透明等,感興趣的可以學(xué)習(xí)一下2022-12-12Python實(shí)現(xiàn)過(guò)濾單個(gè)Android程序日志腳本分享
這篇文章主要介紹了Python實(shí)現(xiàn)過(guò)濾單個(gè)Android程序日志腳本分享,本文講解了原理、實(shí)現(xiàn)代碼、使用方法、最新代碼等內(nèi)容,需要的朋友可以參考下2015-01-01對(duì)numpy Array [: ,] 的取值方法詳解
今天小編就為大家分享一篇對(duì)numpy Array [: ,] 的取值方法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07YOLOv5車牌識(shí)別實(shí)戰(zhàn)教程(三)模型訓(xùn)練與評(píng)估
這篇文章主要介紹了YOLOv5車牌識(shí)別實(shí)戰(zhàn)教程(三)模型訓(xùn)練與評(píng)估,在這個(gè)教程中,我們將一步步教你如何使用YOLOv5進(jìn)行車牌識(shí)別,幫助你快速掌握YOLOv5車牌識(shí)別技能,需要的朋友可以參考下2023-04-04Python日期時(shí)間對(duì)象轉(zhuǎn)換為字符串的實(shí)例
今天小編就為大家分享一篇Python日期時(shí)間對(duì)象轉(zhuǎn)換為字符串的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-06-06Python爬蟲(chóng)爬驗(yàn)證碼實(shí)現(xiàn)功能詳解
這篇文章主要介紹了Python爬蟲(chóng)爬驗(yàn)證碼實(shí)現(xiàn)功能詳解的相關(guān)資料,需要的朋友可以參考下2016-04-04