1. 程式人生 > >python切片-擷取-逆序擷取

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從左或從右,向中間切取字元。

參考連結: