Python 資料型別 - 字串

Jinku Hu 2023年1月30日 2018年2月6日
  1. 建立字串
  2. 訪問字串元素
  3. Python 字串操作
  4. 適用於字串的內建函式
  5. Python 字串格式化
  6. 字串 format() 方法
Python 資料型別 - 字串

我們將在本節中介紹 Python 的字串資料型別。

字串是一系列字元,由計算機中的二進位制資料表示。在 Python 中,字串是 unicode 字元的集合。

Info
Python 字串是不可變資料型別。

建立字串

可以使用單引號或雙引號建立字串,也可以使用三引號建立多行字串。

x = "String of characters"
x = """Multiline
string"""

訪問字串元素

切片操作符 [] 用來訪問字串中的字元,索引是跟 Python 其他的資料型別一樣是從 0 開始的。

>>> x = 'Python Programming'
>>> print('x[0] =', x[0])
'P'
>>> print('x[4:15] =', x[4:15])
'on Programm'
>>> x[4] = 'l'
TypeError: 'str' object does not support item assignment
Warning
索引必須是整型數字,否則就會有 TypeError 報錯。

負索引

你可以通過負索引來訪問字串中的字元,比如 -1 就是指向最後一個字元,類似的,-2 指向倒數第二個字元。

>>> s = "Python"
>>> print(s[-1])
'n'
>>> print(s[-2])
'o'
>>> print(s[-3])
'h'

刪除字串中的字元

由於字串是不可變的,因此無法刪除字串中的字元。但是你可以為同一變數指定一個新字串。例如,

>>> s = 'Python'
>>> s = 'Program'
>>> s
'Program'

整個字串可以用 del 關鍵字來刪除,

>>> del s

Python 字串操作

連線兩個或多個字串

你可以通過來+ 號連線其兩個或多個字串。

>>> s1 = 'Python '
>>> s2 = 'Programming'
>>> print(s1 + s2)
'Python Programming'

如果你把兩個字串寫在一起,它們會跟用+ 一樣,互相連線起來。

>>> print('Python ' 'Programming')
'Python Programming'

括號也可以用來連線在多行內的不同的字串,這個在需要分叉長字串(比如檔案路徑)的時候非常實用。

>>> s = ('Python '
     'Programming')
>>> s
'Pyhton Programming'

遍歷字串

可以通過 for 迴圈來遍歷整個字串,

s = 'Python'
for i in s:
    print(i)
P
y
t
h
o
n

字串成員檢查

通過 in 關鍵字可以來檢查某個字元或者字串是否存在於該字串中。

>>> s = 'Python'
>>> print('a' in s)
False
>>> print('Py' in s)
True

適用於字串的內建函式

應用於其他序列資料型別的函式也可適用於字串。常用的函式比如 len() 來查詢字串中的字元數,enumerate() 則返回一個包含索引的物件和字串中元素的值作為一對資料的資料物件。

Python 字串格式化

轉義

你可以通過 string-escape 來轉義某些特殊的字元,這些特殊字元在 Python 中有特別的含義。比如,如果你想輸出

James asked, "Do you know Andrew's place?"

你在這裡既不能用單引號,也不能用雙引號,因為字串中含有了這兩種引號。如果你試著把這段文字放在單引號或雙引號內,你會得到 SyntaxError 錯誤。

>>> print("James asked, "Do you know Andrew's place?"")
SyntaxError: invalid syntax
>>> print('James asked, "Do you know Andrew's place?"')	  
SyntaxError: invalid syntax

解決方法就是要麼你用三個單引號''',要麼你就用轉義方法。在 Python 中,轉義是以反斜槓\來開始的,\用來給直譯器提示這裡有特殊的處理。

#using triple quotation marks
print('''James asked, "Do you know Andrew's place?"''')

#escaping single quotes
print('James asked, "Do you know Andrew\'s place?"')

#escaping double quotes
print("James asked, \"Do you know Andrew's place?\"")

下表當中列出了 Python 當中的轉義字元。

Escape sequence Description
\\ 反斜槓
\' 單引號
\" 雙引號
\a ASCII 聲音警示
\b 後退鍵
\n 新建行
\r 回車
\t 水平製表符
\v 豎直製表符
\ooo 八進位制符 ooo
\xHH 十六進位制符 HH
>>> print("C:\\User\\Python36-32\\Lib")
C:\User\Python36-32\Lib
    
>>> print("First Line\nSecond Line")
First Line
Second Line

用原始字串 r 來省略轉義

你可以在字串前加 r 或者 R 來把字串變成原始字串,這樣就省略了轉義字元。

比如下面的例子,

#without r
>>> print("C:\\User\\Python36-32\\Lib")
C:\User\Python36-32\Lib

#with r  
>>> print(r"C:\\User\\Python36-32\\Lib")
C:\\User\\Python36-32\\Lib

字串 format() 方法

format() 方法是用來對字串進行格式化的一把利器,在格式化的字串中,佔位符 {} 將會被 format() 方法中的字串來替代。

你可以通過位置或者關鍵字引數來制定替代的順序。

#default placeholder
>>> s1 = "{}, {} and {}".format('Bread', 'Butter', 'Chocolate')
>>> print(s1)
'Bread, Butter and Chocolate'

#positional arguments
>>> s2 = "{1}, {2} and {0}".format('Bread', 'Butter', 'Chocolate')	  
>>> print(s2)
'Butter, Chocolate and Bread'

#keyword arguments
>>> s3 = "{a}, {x} and {c}".format(x = 'Bread', c = 'Butter', a = 'Chocolate')	  
>>> print(s3)
'Chocolate, Bread and Butter'
Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn