字串,顧名思義就是一串字元形成的序列。我們首先來看一些基本的運算和取值:

s = 'Hello'
t = 'World'
u = s + t     # 字串連接

print(u)
print(s * 3)  # 重複三次
print(u[3:])  # 跟串列一樣,取出各個元素
print(len(u)) # 取得字串長度

要知道字串中有沒有某個字元的話,有以下幾種方法:

s = 'Hello'
t = 'World'
u = s + t

print('W' in u)
print('A' in u)
print(u.index('o')) # 某字元第一個出現的位置
print(u.count('l')) # 某字元出現的次數

Question:上述範例中的「index」和「count」,如果帶入的參數是沒出現的字會怎樣?請猜看看以及試看看。

字串的比較,基本上是依照字典的順序,但所有大寫比所有的小寫還小。事實上,單個字元在電腦當中的表示方法,也可以用數字的規則來解讀,例如 'A'、'a'、'0' 的表示法,分別和數字 65、97、48 相同,如果你需要互相轉換的話,可以使用「ord」以及「chr」:

print('ABC' < 'BBB')
print('Dog' < 'cat')
print('OAO' == 'QQ')

print(ord('A'))
print(chr(97))

Python 提供了一系列的 isxxx 功能,可以判斷字串是否有 xxx 屬性。以下介紹其中一些:

print('\'123\'.isdigit():', '123'.isdigit())      # 是否全為數字
print('\'AbC\'.isalpha():', 'AbC'.isalpha())      # 是否全為字母
print('\'12cd5\'.isalnum():', '12cd5'.isalnum())  # 是否全為數字或字母
print('\'ab345\'.islower():', 'ab345'.islower())  # 是否全為小寫
print('\'123DE\'.isupper():', '123DE'.isupper())  # 是否全為大寫

如果你希望將字串當中的英文全部轉換為大寫或小寫的話,則可以直接使用「upper()」或者「lower()」:

s = 'He110 W0r1d'

print(s.upper())
print(s.lower())

如果字串當中的內容剛好都是數字,而你要轉換變數類型的話,可以使用「str()」或者「int()」、「float()」等方法:

s1 = '123'
print(int(s))

s2 = '456.78'
print(float(s))

n = 9.101112
print(str(n))

要判斷字串是否為特定的字元或字串開頭的話,除了自己取值以外,也可以使用「startswith」以及「endswith」:

print('Hello World'.startswith('He'))
print('Hello World'.endswith('ld'))

如果要搜尋子字串,則除了 in 以外,也有 find 和 rfind 可以使用,且後兩者除了告訴你是否存在以外,若存在的話還會告訴你位置;若是計算子字串的出現次數,則是使用 count:

s = 'I saw a saw saw a saw'

print('saw' in s)
print(s.find('saw'))
print(s.rfind('saw'))
print(s.count('saw'))

用 split 可以把字串以特定字元切開成串列,join 則可以把多個字串依照指定的方式連接起來:

s = 'I saw a saw saw a saw'
t = 'a,b,c,d,e,f,g,h'

print(s.split())
print(t.split(','))
print('~'.join(['a', 'b', 'c']))

如果要把字串中的特定內容取代掉,則可以視情況來使用 replace、strip、lstrip,或者 rstrip 等函式:

s = 'I saw a saw saw a saw'
t = 'aeifubeetkoeitauo'

print(s.replace('saw', 'QQ'))
print(t.strip('aeiou'))  # 從左右刪除特定的一些字元
print(t.lstrip('aeiou')) # 從左邊刪除特定的一些字元
print(t.rstrip('aeiou')) # 從右邊刪除特定的一些字元

需要注意的是,字串並無法像串列一樣,直接取代掉特定位置的字元。如果真的需要這麼做,你可以把該字串先轉換成串列,取代完成以後再 join 回去:

s = 'aifbeeftkofita'

s[6] = 'X' # 這行會產生錯誤

t = list(s)
t[6] = 'X'
s2 = ''.join(t)
print(s2)