python切片-擷取-逆序擷取
一、切片簡介
切片是python中的高階特性,Python的切片操作非常靈活強大、優雅簡潔,如果能全面掌握和正確的運用,會對編寫Python程式碼水平會有很大提升。
切片的基本語法格式如下:
str[begin:end:step]
str: 字串或列表。
begin: 切片的起始位置。預設為0
end: 切片的截止位置。預設為-1,且包含-1
step: 切片的間隔。step不能為0。預設為1
擷取的區間為左閉右開!
step > 0,表示從左往右切取內容;
step < 0,表示從右往左切取內容;
常用的python切片操作如下:
str = '0123456789' print(str[0:3]) # 擷取第一位到第三位的字元 # 從1開始計數 print(str[:]) # 擷取字串的全部字元 print(str[6:]) # 擷取第七個字元到結尾 print(str[:-3]) # 擷取從頭開始到倒數第三個字元之前 # 0123456 print(str[2]) # 擷取第三個字元 print(str[-1]) # 擷取倒數第一個字元 print(str[::-1]) # 創造一個與原字串順序相反的字串 print(str[-3:-1]) # 擷取倒數第三位與倒數第一位之前的字元 # 78 print(str[-3:]) # 擷取倒數第三位到結尾
本文著重講解python切片中,較難理解的部分之一:逆序擷取。
二、切片編號
在切片中,針對字串的字元或列表的元素進行編號,對切片的起始位置begin與截止位置end提供依據。
假設str = '0123456789′,字串中每個字元的編號如下所示:
1. 當step>0時,位置編號為從左邊的0為起點開始,往右依次遞增(0,1,2,3,4,5...),如下圖所示:
例:Str[2:6:1]
解析:從index=2開始,到index=6截止,左閉右開(包含2,不包含6),間隔為1取值切片。
等同於:str[2:6]
結果:2345
同理:
例:Str[2:6:2]
解析:從index=2開始,到index=6截止,左閉右開(包含2,不包含6),間隔為2取值切片。
結果:24
2. 當step<0時,位置編號為從右邊的-1為起點開始,從右往左依次遞減(...,-5,-4,-3,-2,-1),如圖:
所以,當step<0時,如此:Str[2:6:-2] 的表示式為什麼沒有輸出?因為此時的begin與end不在依次遞減的範圍內…
例:Str[::-1]
解析:沒有begin與end, begin預設為0,end預設為-1,當step=-1時,即從右往左切取字元,逆序輸出,完成字串反轉
結果:9876543210
三、逆序擷取
依然假設:str = '0123456789’
1. print(str[:-6:-2])
解析:當begin無指定,end指定時(-6),在切取時不包含index=end的元素!對應關係如下圖:
Step=-2<0,即逆序從右往左,以end為終點,step為2切取字元。
結果:975
2. print(str[:-6:2])
解析:當begin無指定,end指定時(-6),在切取時不包含index=end的元素!對應關係如下圖:
Step=2>0,即正序從左往右,以end為終點,step為2切取字元。
結果:02
注意:輸出不是024!因為此時切取時不包含index=end的元素!
3. print(str[-6::-2])
解析:當begin指定(-6),end無指定時,在切取時包含index=begin的元素!對應關係如下圖:
Step=-2<0,即逆序從右往左,以begin為起點,step為2切取字元。
結果:420
4. print(str[-6::2])
解析:當begin指定(-6),end無指定時,在切取時包含index=begin的元素!對應關係如下圖:
Step=2>0,即正序從左往右,以begin為起點,step為2切取字元。
結果:468
總結:
對於python切片擷取,一般情況下都容易分析與理解,當遇到較為複雜的逆序擷取時:
首先,根據begin或end,找到切取起點或終點;
其次,檢視step,分析切取是從左往右還是從右往左;
第三,當指定begin,不指定end時,切取時包含index=begin的字元,根據step向左或向右切取字元;
當指定end,不指定begin時,切取時不包含index=end的字元,根據step從左或從右,向中間切取字元。