網(wǎng)站首頁 編程語言 正文
Python中的切片知識.
在Python中,切片(slice)是對序列型對象(如list, string, tuple)的一種高級索引方法。 普通索引只取出序列中 一個下標(biāo) 對應(yīng)的元素,而切片取出序列中 一個范圍 對應(yīng)的元素,這里的范圍不是狹義上的連續(xù)片段。通俗一點就是在一定范圍里面.用刀切出一部分,達(dá)到自己需要的一部分.
一、切片的索引方式
以 a = [ 1,2,3,4,5,6,7,8,9] 為例,正索引和負(fù)索引
二、索引的一般方式
一個完整的切片是包含三個參數(shù)和兩個冒號" : " ,用于分隔三個參數(shù)(start_index、end_index、step)。當(dāng)只有一個“:”時,默認(rèn)第三個參數(shù)step=1;當(dāng)一個“:”也沒有時,start_index=end_index,表示切取start_index指定的那個元素。
切片操作的基本表達(dá)式:object[start:end:step]
start:切片的起始位置,如果沒有值的話從頭開始.
end:切片的結(jié)束位置,但不包含end(前閉后開),如果沒有值的話表示切割到結(jié)束為止.
step:步長,默認(rèn)取值為1,如果步長為正數(shù)的情況表示從左往右,反正若為負(fù)數(shù)則表示從右往左. step的正負(fù)決定切的方向,這一點需要尤為注意!!!
三、 切片操作的 詳細(xì)切法
1.切割單個值
>> a = [1,2,3,4,5,6]
>>> a[0] ##單個數(shù),代表位數(shù),第0位就是a里面的第一位
1
>>> a[5]##a里面的第5位,注意要從0作為第一位開始數(shù)
6
2.切割完整對象
>>> b=[6,3,6,7,8,2,5,4]
>>> b[:] ##單獨一個冒號,代表從頭取到尾,步長默認(rèn)為1
[6, 3, 6, 7, 8, 2, 5, 4]
>>> b[::]##單獨兩個冒號一樣代表從頭取到尾,步長默認(rèn)為1
[6, 3, 6, 7, 8, 2, 5, 4]
>>> b[::-1]##注意,兩個冒號后面是步長,步長為1,故應(yīng)從右往左取
[4, 5, 2, 8, 7, 6, 3, 6]
3.當(dāng)start和end全部為正數(shù)時.
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a[1:6] ##默認(rèn)步長為1,從左往右,注意前閉后開
[1, 2, 3, 4, 5]
>>> a[1:6:-1]
[] ## 當(dāng)取值的大小方向與步長的方向沖突時,返回值是空.
>>> a[6:1:-1]
[6, 5, 4, 3, 2]
>>> a[:6] ## 沒有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ù)的時.
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a[:-6] ## -6意思是從右往左數(shù)的第六位,故第六位是4,然后默認(rèn)步長為1(從右往左),star未寫,故從頭開始取到4
[0, 1, 2, 3]
>>> a[-1:-6]
[]
>>> a[-1:-6:-1]
[9, 8, 7, 6, 5]
>>> a[-6:-1] ## 這個是從-6取到-1,步長為1,意思是從右往左數(shù)第6位到從右往左的第一位
[4, 5, 6, 7, 8]
>>> a[:-6:-1] ## 這個是從0取到-6,步長為-1,因為開頭是冒號,故起點被隱藏了
[9, 8, 7, 6, 5]
>>> a[-6:]
[4, 5, 6, 7, 8, 9]
>>> a[-6::-1] ## 注意這個不等于[-6:-1],區(qū)別是這里是::(兩個冒號),兩個冒號后連接的是步長
[4, 3, 2, 1, 0]
5.start和end是正負(fù)混合情況時
>>> 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.切片中的三個參數(shù)為表達(dá)式
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a[1+2:2*3:7%2] ## 思路一樣,運算出來,繼續(xù)切
[3, 4, 5]
8.切片可以操作其他的對象
>>> t = (1,2,3,4,5)
>>> t[1:3]
(2, 3)
>>> s = "ACDRF" ##切片在字母上也是可以使用的,所以說切片很強大
>>> 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:]: ## 意思是從第二位開始取,步長為3,[-10]則是從倒數(shù)10位開始取,意思是去末尾10位.
... print(i)
...
71
74
77
80
83
86
89
92
95
98
補充:擴展切片
早期的Python解釋器僅支持上述a[start:stop]形式的基本切片,后來加入了下面要介紹的切片形式,擴展切片的名稱也流傳下來,實際上不用擔(dān)心,這早已是Python所支持的標(biāo)準(zhǔn)語法。
擴展切片指的是這樣的切片形式:a[start:stop:step],其中step是一個非零整數(shù),即比簡單切片多了調(diào)整步長的功能,此時切片的行為可概括為:從start對應(yīng)的位置出發(fā),以step為步長索引序列,直至越過stop對應(yīng)的位置,且不包括stop本身。事實上,簡單切片就是step=1的擴展切片的特殊情況。需要詳細(xì)解釋的是step分別為正數(shù)和負(fù)數(shù)的兩種情況。
step為正數(shù)
當(dāng)step為正數(shù)時,切片行為很容易理解,start和stop的截斷和缺省規(guī)則也與簡單切片完全一致:
>>> 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ù)時,切片將其解釋為從start出發(fā)以步長|step|逆序索引序列,此時,start和stop的截斷依然遵循前述規(guī)則,但缺省發(fā)生一點變化,因為我們說過,在缺省的情況下,Python的行為是盡可能取最大區(qū)間,此時訪問是逆序的,start應(yīng)盡量取大,stop應(yīng)盡量取小,才能保證區(qū)間最大,因此:
按照擴充索引范圍的觀點, start的缺省值是 無窮大(?), stop的缺省值是 無窮小(?)
>>> 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)行切片操作的時候,超出下標(biāo)不會報錯
? 2.如果切片操作的時候方向相互矛盾的話,不會報錯,返回為空
? 3.在python中進(jìn)行反向輸出列表
? 第一種: 循環(huán) 第二種 :[::-1] 第三種:reverse()
原文鏈接:https://blog.csdn.net/Zombie_QP/article/details/125063501
相關(guān)推薦
- 2022-10-29 SQL?Server主鍵約束(PRIMARY?KEY)_MsSql
- 2022-05-02 Python中的變量和數(shù)據(jù)類型詳情_python
- 2022-12-26 Python中pywifi模塊的基本用法講解_python
- 2022-07-21 C語言全面細(xì)致講解單雙精度float與double的使用方法_C 語言
- 2022-11-27 Python?Django教程之實現(xiàn)待辦事項應(yīng)用程序_python
- 2022-12-13 使用Idea調(diào)試RocketMQ源碼教程_服務(wù)器其它
- 2022-06-27 Android利用ContentProvider初始化組件的踩坑記錄_Android
- 2024-04-06 @Delete通過批量刪除的方法
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支