Python 簡易手冊

單元 33 - 字串

字串 (string) 就是文字資料, Python 中字串的字面常數 (literal) 就是單引號或雙引號圍起來的內容,單引號開頭的字串不能以雙引號結尾,反之亦然,但是雙引號字串中可以使用單引號,同樣單引號字串中可以使用雙引號。

Python 還有一種三引號字串,比較常用在定義文件字串 (documentation string) ,單元 4 - 文件字串詳細介紹如何定義文件字串。

由於字串是不可變的 (immutable) 序列 (sequence) ,不可變的序列支援以下操作

操作說明
x in s判斷 x 是否是 s 的元素
x not in s判斷 x 是否不是 s 的元素
s + t回傳合併 s 與 t 的新序列
s * n
n * s
回傳將 s 複製 n 倍的新序列
s[i]取得 s 中索引值為 i 的元素
s[i:j]取得 s 中索引值為 i 到 j - 1 的子序列
s[i:j:k]取得 s 中索引值為 i 到 j - 1 間隔 k 的子序列
len(s)回傳 s 中的元素總量
min(s)回傳 s 中的最小值
max(s)回傳 s 中的最大值
str(object='')將 object 轉換成字串
str(object=b'', encoding='utf-8', errors='strict')將 bytes 或 bytearray 轉換成字串
s.index(x[, i[, j]])回傳 s 中 x 的索引值,或是 x 在 i 到 j 之間的索引值
s.count(x)回傳 x 在 s 中的數量

如果兩個字串相鄰會直接連接,字串中結尾加上反斜線 (backslash) 可以跨行,例如

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# 字串自動連接
a = "There is " "no spoon."
print(a)

# 跨行最後加上 \
b = 'There ' 'is\
 no spoon.'
print(b)

# 判斷 a 與 b 是否相等
print(a == b)

# 檔名: string_demo.py
# 說明: 《Python簡易手冊》的範例
# 網址: http://kaiching.org
# 作者: Kaiching Chang
# 時間: 2024 年 3 月

習慣上如果要連接字串會用算術運算子中的加號,單元 12 - 算術運算子介紹這種用法。

設定變數 a 的字串為兩個相鄰字串

 1
 2
 3
# 字串自動連接
a = "There is " "no spoon."
print(a)

設定變數 b 除了兩個字串連接外,在第二個字串最後加上反斜線,讓這個字串跨到下一行

 5
 6
 7
 8
# 跨行最後加上 \
b = 'There ' 'is\
 no spoon.'
print(b)

Python 中程式碼可以在最後加上反斜線跨行,倒是註解 (comment) 中的反斜線依然是註解內容,所以註解不能用這種方式跨行。

最後用比較運算子 (comparison operator) 判斷變數 ab 是否一樣,執行結果如下

> python string_demo.py
There is no spoon.
There is no spoon.
True
>

單元 13 - 比較運算子介紹比較運算子。

以上兩個字串 ab 雖然寫法不同,但是內容一樣。

字串中可以加入跳脫字元 (escape character) ,跳脫字元是反斜線加上指定符號,所有的跳脫字元跳脫序列 (escape sequence) ,主要是特殊符號,包括特殊字元、空白符號還包括 Unicode 字元,下例在字串中加入新行符號

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 加入斷行符號
s = "There\n is\n no\n spoon."

# 印出變數 s
print(s)

# 檔名: string_demo2.py
# 說明: 《Python簡易手冊》的範例
# 網址: http://kaiching.org
# 作者: Kaiching Chang
# 時間: 2024 年 3 月

新行符號為反斜線 \ 加上英文小寫字母 n ,代表印出的時候這裡會斷行,執行結果如下

> python string_demo2.py
There
 is
 no
 spoon.
>

字串中可以用以下的跳脫字元

種類說明
\\反斜線 \
\'單引號 '
\"雙引號 "
\aASCII 鈴聲
\bASCII 倒退鍵
\fASCII 換頁符號
\nASCII 新行符號
\rASCII 輸入鍵符號
\tASCII Tab 鍵符號
\vASCII 垂直 Tab 鍵符號
\ooo八進位的 Unicode 字元
\xhh十六進位的 Unicode 字元

至於字串的型態名稱為 str ,內建函數 (built-in function) str() 可以轉換引數 (argument) 為字串形式, len() 會回傳字串的長度,也就是字串的字元總數,舉例如下

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# 轉換成字串
print(type(str(11)))
print(type(str(22.33)))
print(type(str(10 + 11j)))

# 計算字串中的字元個數
print(len("Hello"))
print(len("Good"))
print(len("Actually"))

# 檔名: string_demo3.py
# 說明: 《Python簡易手冊》的範例
# 網址: http://kaiching.org
# 作者: Kaiching Chang
# 時間: 2024 年 3 月

第 2 到 4 行分別轉換整數、浮點數及複數為字串,再用 type() 印出型態名稱,第 7 到 9 行分別計算三個字串的長度,此例執行結果如下

> python string_demo3.py
<class 'str'>
<class 'str'>
<class 'str'>
5
4
8
>

字串變數可以用索引值取得子字串,舉例如下

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# 建立字串變數
s = "There is no spoon."

# 印出子字串
print(s[2])
print(s[6:8])
print(s[12:])
print(s[-6])
print(s[-6:-1])

# 檔名: string_demo4.py
# 說明: 《Python簡易手冊》的範例
# 網址: http://kaiching.org
# 作者: Kaiching Chang
# 時間: 2024 年 3 月

索引值從 0 開始,所以第 5 行是取得字串變數 s 的第 3 個字元 e

 5
print(s[2])

索引值可以用冒號取得範圍,第 6 行表示取得索引值從 6 開始,到 8 - 1 的子字串,這會是單字 is

 6
print(s[6:8])

如果冒號後不加索引值,表示到字串結尾,例如第 7 行表示從索引值 12 到最後,這會是 spoon.

 7
print(s[12:])

索引值也可以是負數,負數就是字串結尾開始算,例如第 8 行索引值 -6 就是倒數第 6 個字元,這會是 s

 8
print(s[-6])

第 9 行則是負數索引值的範圍,注意一樣是由要取得子字串的索引值開始,最後則是最後一個要取得字元的索引值結束

 9
print(s[-6:-1])

此例執行結果如下

> python string_demo4.py
e
is
spoon.
s
spoon
>

如果要讓跳脫字元沒有作用,這需要定義 r 前綴字串,舉例如下

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# 設定 raw 字串
s1 = r"\\\\"
s2 = "\\\\"
s3 = r"\n\b"

# 印出字串
print(s1)
print(s2)
print(s3)

# 檔名: string_demo12.py
# 說明: 《Python簡易手冊》的範例
# 網址: http://kaiching.org
# 作者: Kaiching Chang
# 時間: 2024 年 3 月

由於字串中 \\ 表示單一個 \ ,如果是在 r 字串中就一樣是 \\ ,其他跳脫字元亦同,此例執行結果如下

> python string_demo12.py
\\\\
\\
\n\b
>

參考資料

上一頁 單元 32 - del 陳述
回 Python 簡易手冊 首頁
下一頁 單元 34 - 字串方法
回 Python 教材首頁
回程式語言教材首頁