為什麼 Python 中的子字串切片索引超出範圍仍然可以工作?
切片是 Python 中用於提取序列(例如字串、列表或元組)一部分的技術。切片涉及指定序列的起始和結束索引,生成的切片將包含從起始索引到(但不包括)結束索引的所有元素。
Python 中的切片使用方括號 [] 表示,並提供由冒號 ‘:’ 分隔的起始和結束索引。如果省略起始索引,則假定為 0,如果省略結束索引,則假定為序列的長度。
例如,假設我們有一個包含單詞“Python”的字串 text
要使用切片提取此字串的前三個字元,我們可以使用以下程式碼
示例
text = "Python" first_three = text[0:3] print(first_three)
輸出
Pyt
我們還可以使用**切片中的負索引**從序列的末尾開始計數。例如,要提取字串 text 的最後兩個字元,我們可以使用以下程式碼
這裡,text[−2:] 表示“獲取字串 text 的從倒數第二個字元開始到字串末尾的切片”。
示例
text = "Python" last_two = text[-2:] print(last_two)
輸出
on
切片還可以用於從序列中提取每第 n 個元素。例如,要從字串 text 中提取每隔一個字元,我們可以使用以下程式碼
這裡,text[::2] 表示“獲取字串 text 的從字串開頭到字串末尾的切片,但只包含每隔一個字元”。
示例
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 中的字串時,務必注意此行為,以避免出現意外結果。
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP