Python 字串切片



Python **字串切片**是從給定字串建立子字串的一種方法。在這個過程中,我們提取字串的一部分或片段。通常,我們使用切片運算子“[ : ]”對 Python 字串進行切片。在繼續進行字串切片之前,讓我們瞭解一下字串索引。

在 Python 中,一個 字串 是一個有序的 Unicode 字元 序列。字串中的每個字元在序列中都有一個唯一的索引。索引從 0 開始。字串中的第一個字元的索引為 0。索引不斷遞增到字串的末尾。

如果一個字串變數宣告為 var="HELLO PYTHON",則字串中每個字元的索引如下:

string index representation

Python 字串索引

Python 允許您透過其索引訪問字串中的任何單個字元。在這種情況下,0 是字串的下界,11 是字串的上界。因此,var[0] 返回 H,var[6] 返回 P。如果方括號中的索引超過上界,Python 將引發 IndexError。

示例

在下面的示例中,我們透過索引訪問字串的字元。

var = "HELLO PYTHON"
print(var[0]) 
print(var[7])  
print(var[11])  
print(var[12]) 

執行程式碼後,將產生以下輸出:

H
Y
N
ERROR!
Traceback (most recent call last):
  File "<main.py>", line 5, in <module>
IndexError: string index out of range

Python 字串負索引和正索引

Python 序列型別(因此也是字串物件)的獨特特性之一是它也具有負索引方案。在上面的示例中,使用了正索引方案,其中索引從左到右遞增。在負索引的情況下,末尾的字元具有 -1 索引,索引從右到左遞減,因此第一個字元 H 的索引為 -12。

positive negative indexing

示例

讓我們使用負索引來獲取 N、Y 和 H 字元。

var = "HELLO PYTHON"
print(var[-1]) 
print(var[-5])  
print(var[-12])  

執行上述程式碼後,將得到以下結果:

N
Y
H

因此,我們可以使用正索引或負索引從字串中檢索字元。

在 Python 中,字串是一個不可變物件。如果物件一旦儲存在某個記憶體位置就不能就地修改,則該物件是不可變的。您可以使用索引檢索字串中的任何字元,但不能將其替換為另一個字元。

示例

在下面的示例中,字元 Y 在 HELLO PYTHON 中的索引為 7。嘗試將 Y 替換為 y,看看會發生什麼。

var="HELLO PYTHON"
var[7]="y"
print (var)

它將產生以下**輸出**:

Traceback (most recent call last):
 File "C:\Users\users\example.py", line 2, in <module>
  var[7]="y"
  ~~~^^^
TypeError: 'str' object does not support item assignment

TypeError 是因為字串是不可變的。

Python 字串切片

Python 將 ":" 定義為字串切片運算子。它從原始字串返回一個子字串。其一般用法如下:

substr=var[x:y]

":" 運算子需要兩個整數運算元(兩者都可以省略,我們將在後續示例中看到)。第一個運算元 x 是所需切片第一個字元的索引。第二個運算元 y 是所需字串中最後一個字元之後一個字元的索引。因此,`var[x:y]` 將從原始字串中分離從第 x 個位置到第 (y-1) 個位置的字元。

示例

var="HELLO PYTHON"

print ("var:",var)
print ("var[3:8]:", var[3:8])

它將產生以下**輸出**:

var: HELLO PYTHON
var[3:8]: LO PY

Python 字串切片與負索引

與正索引一樣,負索引也可以用於切片。

示例

以下示例顯示瞭如何使用負索引切片字串。

var="HELLO PYTHON"
print ("var:",var)
print ("var[3:8]:", var[3:8])
print ("var[-9:-4]:", var[-9:-4])

它將產生以下**輸出**:

var: HELLO PYTHON
var[3:8]: LO PY
var[-9:-4]: LO PY

字串切片中索引的預設值

Python 的切片運算子的兩個運算元都是可選的。第一個運算元預設為零,這意味著如果我們不提供第一個運算元,則切片從第 0 個索引處的字元開始,即第一個字元。它將最左邊的子字串切片到“y-1”個字元。

示例

在這個例子中,我們使用預設值執行切片操作。

var="HELLO PYTHON"
print ("var:",var)
print ("var[0:5]:", var[0:5])
print ("var[:5]:", var[:5])

它將產生以下**輸出**:

var: HELLO PYTHON
var[0:5]: HELLO
var[:5]: HELLO

示例

同樣,y 運算元也是可選的。預設情況下,它是“-1”,這意味著字串將從第 x 個位置切片到字串的末尾。

var="HELLO PYTHON"
print ("var:",var)
print ("var[6:12]:", var[6:12])
print ("var[6:]:", var[6:])

它將產生以下輸出:

var: HELLO PYTHON
var[6:12]: PYTHON
var[6:]: PYTHON

示例

當然,如果兩個運算元都不使用,則切片將等於原始字串。這是因為“x”預設為 0,“y”預設為最後一個索引+1(或 -1)。

var="HELLO PYTHON"
print ("var:",var)
print ("var[0:12]:", var[0:12])
print ("var[:]:", var[:])

它將產生以下**輸出**:

var: HELLO PYTHON
var[0:12]: HELLO PYTHON
var[:]: HELLO PYTHON

示例

為了獲得原始字串的子字串,左運算元必須小於右運算元。如果左運算元大於右運算元,Python 不會引發任何錯誤,而是返回一個空字串。

var="HELLO PYTHON"
print ("var:",var)
print ("var[-1:7]:", var[-1:7])
print ("var[7:0]:", var[7:0])

它將產生以下**輸出**:

var: HELLO PYTHON
var[-1:7]:
var[7:0]:

字串切片的返回型別

切片返回一個新的字串。您可以很好地在切片字串上執行字串操作,例如連線或切片。

示例

var="HELLO PYTHON"

print ("var:",var)
print ("var[:6][:2]:", var[:6][:2])

var1=var[:6]
print ("slice:", var1)
print ("var1[:2]:", var1[:2])

它將產生以下**輸出**:

var: HELLO PYTHON
var[:6][:2]: HE
slice: HELLO
var1[:2]: HE
廣告