開啟「互動式 Python 執行列
Python字串選取
 課程目錄
 編輯章節
 EDU-MD
 Google 教室
 加至書籤

字串的選取

在上個章節中,我們討論了一些有關字串的基本知識—字串的建立、運算等。但是你知道嗎?字串其實與列表有很多的相似之處,甚至我們可以說,字串就是一個有很多字的列表!因為這個特點,很多程式語言都有有趣而實用的字串功能,接下來,讓我們來研究一下 Python 字串的選取!

字串的位置編號

在程式中,字串中的每一個字都有自己的編號位置(index)。在大多數現代的高階程式語言中,字串中的文字從左側至右側,分別編為 0、1、2、3…;有些程式語言則從 1 開始編號。我們現在所熟知的 Python,與多數的語言一樣,採用從 0 開始編號的系統(zero-based indexing

現在,讓我們馬上來建立一個字串看看吧!我們將「a fox」這段文字賦予給一個變數,並且將它 print 出來:

stringA = "a fox"  
print(stringA)  

我們將會得到這樣的結果:

a fox  

現在,我們確定這個宣告變數的過程是沒有問題的,那就可以來討論關於字串編號的問題了。剛剛說過,字串中的每一個字都有自己獨特的編號,而且這些編號是從 0 開始計算,因此我們可以推測,「a fox」中的第一個字(a)編號為 0,第二個字( )編號為 1,第三個字(f)編號為 2,以此類推。

要怎麼確定這樣的想法是不是對的呢?我們可以這樣來驗證:

print(stringA[0])  

這樣我們可以得到:

a  

這個「a」其實就是「a fox」中 0 號位置的「a」,可見我們剛剛的推測是正確的。我們接著來回顧一下,在剛剛的範例程式中發生了什麼事:

我們剛才  print 出了 stringA[0],代表變數  stringA 的 0 號位置,也就是「a fox」中的第一個字,「a」。此處我們得到一個重點結論:在字串後面加上 [i]可以表示字串中特定位置的某個字i 為編號)。

除此之外,在 Python 中,字串選取的編號也可以是負值,如下圖所示:

這裡我們就有一個很大的問題了:如果可以使用正值來選取字串,那為何要麻煩自己,搞一個負值的字串編號呢?其實答案很簡單,有時候我們想要選取字串的最後一個字元,但是卻不知道字串的長度是多少。當然,我們可以使用 len() 來獲取字串長度,但如果可以直接使用 stringA[-1] 的形式來選取,就簡單多了!

[x:y] 選取

[i] 可以用來獲取字串中特定位置的文字,但如果今天要獲取的是字串中的另一段字串,這個方法就不可行了。因此,Python 有另一種在字串中選取的方法,大概可以表達成 [x:y]

讓我們回到剛剛的那個例子:

stringA = "a fox"  

我們試著使用這種選取方法:

print(stringA[0:4])  

我們將會得到這樣的結果:

a fo  

為什麼是這樣?讓我們來分析一下。在程式中,[0:4] 選取了字串中從位置 0 開始(包含 0),至位置 4 結束(不包含 4)的字串,也就是選取了 0、1、2、3 四個位置的四個文字。因此,在 print() 時,電腦印出了「a fo」四個文字(包含中間的空格)。

這麼一來,我們可以做一個小小的結論—當選取了字串中 [x:y] 這段文字時,直覺地我們會有兩種想法:

  1. 選取位置 x 開始至 y 結束(包含 x,但不包含 y)
  2. 選取從位置 x 開始的 (x-y) 個字元

另外,x 和 y 兩個數字其實可以省略不寫,讓我們看看下面兩個例子:

a = "Hi there"  
print(a[0:4])  
print(a[:4])  

將會輸出:

Hi t  
Hi t  

由此我們可之,當冒號 : 前的數字 x 被省略時,Python 將會自動將其補上一個 0。省略後的程式比為省略前的程式來的更簡單易懂,例如,當我們看到 a[:4] 時,可以直覺地想到「在位置 4 以前的所有字元」,是不是相當地簡潔呢?

而如果今天所省略的是冒號 : 之後的數字,例如:

b = "Hello there"  
print(b[4:len(b)])  
print(b[4:])  

將會得到:

o there  
o there  

省略冒號 : 之後的數字,Python 將會自動地補上字串的長度,也就是說,當我們看到 b[4:] 時,也可以直覺地想到「從位置 4 開始所有剩下的字元」,可說是相當方便。

[x:y:d] 選取

除了使用 [x:y] 來選取字串中的片段之外,Python 還提供了一個相當有趣的選字方法:[x:y:d] 選取,其中,d 所代表的是選字位置的公差。聽不懂嗎?讓我們馬上進入這個例子:

a = "ThisStringIsLong"  
print(a[2:11])  

將會輸出:

isStringI  

目前為止,都是我們剛剛所學過的東西,那麼,讓我們在選取字串的 [] 中加入第三個數字 d:

a = "ThisStringIsLong"  
print(a[2:11:2])  

螢幕上將會得到:

iSrnI  

為什麼是這樣?記得我們剛剛所選取的 [2:11] 嗎?我們得到的結果是「isStringI」。現在,當我們選取 [2:11:2] 時,也是在選取同個範圍的字串,但是我們告訴電腦「每 2 個文字才選取一次」。因此,電腦在選取「isStringI」時,從第一個字 i 開始,每隔兩個字元選取一次,分別得到 i、S、r、n、I 五個字母。

讓我們看看第二個類似的例子,並且用圖片來解釋選取的過程:

a = "a fox here"  
print(a[2:8:2])  

將會得到:

fxh  

最後,讓我們來看看,選取 [x:y:d] 時,省略 x 和 y,並且將 d 設為 -1 的字串選取會有什麼樣的結果:

m = "a cool string"  
print(m[::-1])  

將會印出:

gnirts looc a  

是不是真的很酷呢!這麼一來,如果要將一個字串反轉,只需要使用 [::-1] 便可以快速地達成了!

 均一平台
 台達磨課師
 酷課雲
 可汗學院
無相關資源
 收起側邊目錄
 
前往目錄頁面