【Python自學】字串索引!從零開始(雙關)學習Python的字串數列
📘 Python 中的字串索引,從零開始(雙關)!
在 Python 中,字串是由一連串「字元」組成的序列。每個字元都有自己的位置,這個位置就叫做索引。
只要知道字元的位置,就可以用索引把它取出來。這也是處理文字資料、Email、帳號、網址時很常用的基礎技巧。
🧭 基本概念
學字串索引時,可以先記住下面幾個重點。
- 字串是序列:字串由一個一個字元組成,例如 "Python" 裡面有 P、y、t、h、o、n。
- 索引從 0 開始:第一個字元的位置是 0,不是 1。
- 可以使用正向索引:從左到右計算,第一個位置是 0。
- 可以使用反向索引:從右到左計算,最後一個位置是 -1。
- 也可以使用切片:一次取出一段範圍內的字元。
正向索引從 0 開始,反向索引從 -1 開始。
🧪 Python 字串索引基本範例
先用一個簡單的字串 "Python" 來看索引怎麼使用。
輸出結果
其中 word[0:3] 代表從索引 0 開始取,一直取到索引 3 之前。
所以結果是 Pyt,不是 Pyth。
🧩 建立索引邏輯圖解
以 Python 這個字串為例,每個字元的位置如下。
| 字元 | P | y | t | h | o | n |
|---|---|---|---|---|---|---|
| 正向索引 | 0 | 1 | 2 | 3 | 4 | 5 |
| 反向索引 | -6 | -5 | -4 | -3 | -2 | -1 |
✂️ 字串切片:一次取出一段文字
除了取單一字元,也可以用切片一次取得某一段字串。
輸出結果
切片語法可以寫成:
其中「結束索引」不會被包含進去。
| 寫法 | 意思 | 結果 |
|---|---|---|
| word[0:2] | 從索引 0 取到索引 2 之前 | Py |
| word[2:6] | 從索引 2 取到索引 6 之前 | thon |
| word[:3] | 從開頭取到索引 3 之前 | Pyt |
| word[3:] | 從索引 3 取到最後 | hon |
| word[:] | 取出整個字串 | Python |
⚠️ 常見錯誤:IndexError
如果索引超出字串範圍,Python 就會出現 IndexError。
因為 "Hi" 只有兩個字元:
| 字元 | H | i |
|---|---|---|
| 正向索引 | 0 | 1 |
| 反向索引 | -2 | -1 |
所以 word[5] 找不到對應的字元。
錯誤訊息
例如 word[0:100] 會盡可能取到最後,而不是直接中斷程式。
📮 簡單字串索引範例:Email 程式索引
字串索引很適合用來整理有固定格式的文字,例如 Email。
一般 Email 通常可以拆成三個部分:
例如:
其中:
- 帳號:yuanphx365
- 分隔符號:@
- 網域名稱:gmail.com
我們可以先找出 @ 的位置,再用切片把帳號和網域名稱分開。
完整程式碼
程式執行結果
這樣就成功把 Email 裡面的帳號和網域名稱分開了。
程式邏輯說明
這段程式的關鍵在於 mail.index("@")。
它會找出 @ 在字串中的位置。以 yuanphx365@gmail.com 來說,@ 的位置是 10。
接著用切片取出帳號:
這代表從索引 0 開始,取到 index 之前。因為切片不包含結束索引,所以不會把 @ 取進來。
再用下面這段取得網域名稱:
這代表從 @ 的下一個位置開始,一直取到字串最後。
index 是 @ 的位置;index 前面是帳號,index 後面是網域。
🔎 index() 與 find() 的小補充
在 Python 中,index() 和 find() 都可以用來尋找某個字元或字串的位置。
| 方法 | 找到時 | 找不到時 |
|---|---|---|
| index() | 回傳索引位置 | 產生錯誤 |
| find() | 回傳索引位置 | 回傳 -1 |
例如:
輸出結果
如果確定字串裡一定有指定字元,可以使用 index()。如果不確定有沒有,使用 find() 會比較安全。
✅ 小結
字串索引是 Python 處理文字資料的基礎。只要理解「位置」的概念,就能從字串中取出需要的字元或片段。
- 字串是序列:每個字元都有自己的索引位置。
- 正向索引:從左到右,從 0 開始。
- 反向索引:從右到左,從 -1 開始。
- 切片:使用 [開始:結束] 取出一段字串。
- 切片不包含結束索引:word[0:3] 會取出索引 0、1、2。
- IndexError:單一索引超出範圍時會出現錯誤。
- Email 拆解:可以用 index("@") 找出分隔位置,再用切片切出帳號與網域。
Python 字串索引從 0 開始;切片取到結束索引之前。
留言
張貼留言