為什麼Python中字串切片索引超出範圍仍然有效?


切片是Python中用於提取序列(例如字串、列表或元組)一部分的技術。切片涉及指定序列的起始和結束索引,生成的切片將包含從起始索引到(但不包括)結束索引的所有元素。

Python中的切片用方括號[]表示,並提供用冒號“:”分隔的起始和結束索引。如果省略起始索引,則假定為0;如果省略結束索引,則假定為序列的長度。

例如,假設我們有一個包含單詞“Python”的字串text

要使用切片提取此字串的前三個字元,我們可以使用以下程式碼

示例

text = "Python"
first_three = text[0:3]
print(first_three)

輸出

Pyt

我們還可以使用**切片中的負索引**從序列的末尾開始計數。例如,要提取字串text的最後兩個字元,我們可以使用以下程式碼

此處,text[−2:]表示“獲取從倒數第二個字元開始到字串末尾的字串切片”。

示例

text = "Python"
last_two = text[-2:]
print(last_two)

輸出

on

切片還可以用於從序列中提取每第n個元素。例如,要從字串text中提取每隔一個字元,我們可以使用以下程式碼

此處,text[::2]表示“獲取從字串開頭到字串結尾的字串切片,但只包含每個第二個字元”。

示例

text = "Python"
every_other = text[::2]
print(every_other)

輸出

Pto

在Python中,使用超出範圍的索引切片子串不會導致錯誤。相反,它將返回空字串或部分子串,具體取決於情況。這乍一看可能很奇怪,但在某些情況下它很有用。

以下是一些示例,有助於解釋其工作原理

使用超出範圍的起始索引進行切片

示例

在此示例中,我們從索引20開始切片字串text。由於text的長度只有11個字元,因此索引20處沒有字元。Python不會報錯,而是返回一個空字串。

text = "Lorem Ipsum"
substring = text[20:]
print(substring) 

使用超出範圍的結束索引進行切片

示例

在此示例中,我們對字串text進行切片,直到索引20。由於text的長度只有12個字元,因此沒有足夠的字元達到索引20。Python不會報錯,而是返回整個字串。

text = "Lorem Ipsum"
substring = text[:20]
print(substring)  

輸出

Lorem Ipsum

使用超出範圍的步長索引進行切片

示例

在此示例中,我們使用步長索引20對字串text進行切片。由於字串中沒有足夠的字元來完成20的完整步長,Python返回部分子串。

text = "Lorem Ipsum"
substring = text[::20]
print(substring)  

輸出

L

示例

在此示例中,我們嘗試從索引3到15切片子串,但字串text只有11個字元。但是,Python不會引發錯誤,而是返回從索引3到字串末尾的子串。

text = "Lorem Ipsum"
substring = text[3:15]
print(substring)

輸出

em Ipsum

示例

在此示例中,我們嘗試從索引15到20切片子串,但字串text只有11個字元。由於結束索引超出範圍,Python返回空字串。

text = "Lorem Ipsum"


substring = text[15:20]
print(substring)

示例

在此示例中,我們嘗試從索引-5到15切片子串。Python中的負索引從字串末尾開始計數,因此-5指的是字串末尾的第5個字元。由於起始索引在範圍內,而結束索引超出範圍,Python返回從起始索引到字串末尾的子串。

text = "Lorem Ipsum"
substring = text[-5:15]
print(substring)

輸出

Ipsum

總而言之,在Python中使用超出範圍的索引進行切片不會導致錯誤,因為這在某些情況下可能很有用。但是,在使用Python中的字串時,務必注意這種行為,以免出現意外結果。

更新於:2023年8月11日

3K+ 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.