1. 程式人生 > Python入門教學 >11 Python 資料型別詳細篇:字串

11 Python 資料型別詳細篇:字串

這節課我們來學習下 Python 基本資料型別中的字串型別,字串型別在實際的開發中是一個經常會用到的資料型別,比較重要。下面我們一起來看一下:

1. 簡介

字串型別的資料表示一段文字,使用單引號或者雙引號建立:

  • 單引號字串 ‘hello’
  • 雙引號字串 “world”

在 python 中使用字串的例子如下:

>>> x = 'hello'
>>> x
'hello'
>>> y = "world"
>>> y
'world'
  • 在第 1 行,建立了使用單引號字串 hello,並將值賦給變數 x
  • 在第 2 行,顯示變數 x 的值為 ‘hello’
  • 在第 3 行,建立了使用雙引號字串 world,並將值賦給變數 y
  • 在第 4 行,顯示變數 y 的值為 ‘world’

使用單引號或者雙引號建立的字串只能在一行,而使用三引號允許一個跨多行的字串。

使用 3 個單引號建立的多行字串示例如下:

s = '''line 1
line 2
line 3'''
print(s)

使用 3 個雙引號建立的多行字串示例如下:

s = """line 1
line 2
line 3"""
print(s)

以上程式的輸出如下:

line 1
line 2
line 3

2. 常見運算操作

本節介紹對字元的最常見的幾種運算操作,包括:

2.1 運算子 +

使用運算子 + 連線兩個字串,示例如下:

>>> 'Hello' + 'World'
>>> 'HelloWorld'
>>> 'Hello' + ' ' + 'World'
>>> 'Hello World'
  • 在第 1 行,使用運算子 + 連線兩個字串
  • 在第 3 行,使用運算子 + 連線多個字串

2.2 運算子 *

使用運算子 * 重複輸出字串,示例如下:

>>> 'hello' * 2
'hellohello'
>>> 'hello' * 3
'hellohellohello'
  • 在第 1 行,使用運算子 * 將字串重複兩次
  • 在第 3 行,使用運算子 + 將字串重複三次

2.3 函式 len

使用函式 len 獲取字串的長度,示例如下:

>>> len('abc')
3
>>> len('imooc')
5

2.4 索引 []

通過索引 [] 獲取字串中指定位置的字元,示例如下:

>>> s = 'imooc'
>>> s[0]
'i'
>>> s[1]
'm'
>>> s[2]
'o'
>>> s[3]
'o'
>>> s[4]
'c'
  • 在 Python 中,單個字元也被當作字串來處理,即該字串只包含一個字元
  • 在第 2 行,獲取字串 s 的第 0 個字元 ‘i’
  • 在第 4 行,獲取字串 s 的第 1 個字元 ‘m’

2.5 索引 [:]

在 Python 中,使用語法 string[start:end],獲取字串 string 中在 [start, end) 範圍的子字串。注意範圍 [start, end) 包含 start,不包含 end。舉例如下:

>>> s = 'imooc'
>>> s[1]
'm'
>>> s[2]
'o'
>>> s[3]
'o'
>>> s[1:4]
'moo'
  • 在第 2 行,獲取字串 s 的第 1 個字元 ‘m’
  • 在第 4 行,獲取字串 s 的第 2 個字元 ‘o’
  • 在第 6 行,獲取字串 s 的第 3 個字元 ‘o’
  • 在第 8 行,獲取字串 s 中從 1 開始、到 4 結束的字串 ‘mooc’,使用 s[1:4] 表示該範圍,注意該範圍包括字串的第 1 個字元、不包括第 4 個字元。

2.6 關鍵字 in

通過關鍵字 in 檢查字串中是否包含指定字串,示例如下:

>>> 'mooc' in 'imooc'
True
>>> 'mook' not in 'imooc'
True
  • 在第 1 行,檢測字串 ‘mooc’ 在 字串 ‘imooc’ 中
  • 在第 3 行,檢測字串 ‘mook’ 不在 字串 ‘imooc’ 中

3. 常用字串方法

3.1 capitalize() 方法

capitalize() 方法把字串的第一個字元大寫,示例如下:

>>> text = 'abc'
>>> text.capitalize()
'Abc'

3.2 count() 方法

count() 方法統計字串出現的次數,示例如下:

>>> text = 'abc abc'
>>> text.count('abc')
2

3.3 startswith(target) 方法

startswith(target) 方法檢查字串是否是以字串 target 開頭,示例如下:

>>> text = 'abc'
>>> text.startswith('ab')
True
>>> text.startswith('bb')
False

3.4 endswith(target) 方法

endswith(target) 方法檢查字串是否是以字串 target 結尾,示例如下:

>>> text = 'abc'
>>> text.endsswith('bc')
True
>>> text.endsswith('cc')
False

3.5 lower() 方法

lower() 方法將字串中所有大寫字元轉換為小寫,示例如下:

>>> text = 'ABC'
>>> text.lower()
'abc'

3.6 upper() 方法

upper() 方法將字串中所有小寫字元轉換為大寫,示例如下:

>>> text = 'abc'
>>> text.upper()
'ABC'

3.7 islower() 方法

如果字串中所有字元是小寫則為真,否則為假,示例如下:

>>> text = 'abc'
>>> text.islower()
True

3.8 isupper() 方法

如果字串中所有字元是大寫則為真,否則為假,示例如下:

>>> text = 'ABC'
>>> text.isupper()
True

3.9 find(target) 方法

檢查是否包含指定字串 target,如果包含字串 target 則返回開始的索引值,否則返回 -1,示例如下:

>>> text = 'imooc'
>>> text.find('oo')
2
>>> text.find('oop')
-1
  • 在第 2 行,查詢字串 ‘imooc’ 是否包含字串 ‘oo’
  • 在第 3 行,字串 ‘oo’ 在字串 ‘imooc’ 中的起始位置是 2,因此返回 2
  • 在第 2 行,查詢字串 ‘imooc’ 是否包含字串 ‘oop’
  • 在第 5 行,字串 ‘imooc’ 中不包含字串 ‘oo’,因此返回 -1

3.10 split() 方法

使用空格將字串分割為多個單詞,返回一個列表,示例如下:

>>> text = 'hello world'
>>> text.split()
['hello', 'world']

預設情況下,使用空格將字串分割為多個單詞,可以在 split() 方法中指定分隔符,示例如下:

>>> text = 'hello:world'
>>> text.split(':')
['hello', 'world']

4. 轉義字元

在 Python 中使用反斜槓 \ 加字母的組合來表示一些特殊字元,例如:\n 表示換行,\ 之後的字元 n 的含義已經不再是原來 ASCII 字元的含義了,所以被稱為轉義字元。

常用的轉義字元如下所示:

轉義字元 描述
\t 製表
\n 換行
\’
\" "
\\ \
  • 使用 \t 的示例
>>> print('a\tb\tc')
a       b       c
>>> print('aa\tbb\tcc')
aa      bb      cc

\t 表示跳到下一個製表符位置,可以使得輸出縱向對齊。

  • 使用 \n 的示例
>>> print('a\nb')
a
b
  • 使用 \’ 的示例
>>> print('\'')
'

在單引號字串中使用 \’ 表示單引號

  • 使用 \" 的示例
>>> print("\"")
"

在雙引號字串中使用 \" 表示雙引號

  • 使用 \\ 的示例
>>> print('\\')
\

在字串中使用 ‘\’ 表示轉義字元 \

5. 字串格式化

5.1 什麼是字串格式化

通過使用字串 + 連線運算可以將多個字串拼接起來,例如:

>>> name = 'tom'
>>> city = 'nanjing'
>>> 'My name is ' + name + ', I live in ' + city + '.'
'My name is tom, I live in beijing.'

在第 3 行,使用字串 + 將以下 5 個字串拼接起來:

  • 'My name is ’
  • name
  • ', I live in ’
  • city
  • ‘.’

最終得到字串 ‘My name is tom, I live in beijing’,像這樣將多個字串拼接起來的表示式非常不直觀,Python 提供了字串格式化用於簡化拼接多個字串。

5.2 format 方法

使用字串提供的 format 方法完成上述的拼接工作,如下所示:

>>> name = 'tom'
>>> city = 'beijing'
>>> text = 'My name is %s, I live in city %s.'
>>> text.format(name, city)
'My name is tom, I live in beijing.'
  • 在第 1 行,建立變數 name
  • 在第 2 行,建立變數 city
  • 在第 3 行,建立字串 text,字串中 %s 被稱為佔位符,text 中有兩個佔位符
  • 在第 4 行,呼叫字串 text 的 format 方法,該方法有兩個引數:name 和 city
  • 在第 5 行,將 text 中的兩個佔位符 %s 替換為這兩個引數,得到最終的結果 ‘My name is tom, I live in beijing.’

與上一節使用 + 運算連線相比,格式化字串顯著的提高了程式的可讀性。

5.3 % 運算子

也可以使用運算子 % 完成上述的拼接工作,如下所示:

>>> name = 'tom'
>>> city = 'beijing'
>>> text = 'My name is %s, I live in city %s.'
>>> text % (name, city)
'My name is tom, I live in beijing.'
  • 在第 1 行,建立變數 name
  • 在第 2 行,建立變數 city
  • 在第 3 行,建立字串 text,字串中 %s 被稱為佔位符,text 中有兩個佔位符
  • 在第 4 行,使用運算子 % 進行字串格式化。運算子 % 有兩個運算元,左邊的運算元是字串變數 text,右邊的運算元是一個元組,元組中包含兩個引數:name 和 city
  • 在第 5 行,將 text 中的兩個佔位符 %s 替換為這兩個引數,得到最終的結果 ‘My name is tom, I live in beijing.’

在實踐中,通常直接將字串與引數使用運算子 % 格式化,如下所示:

>>> name = 'tom'
>>> city = 'beijing'
>>> 'My name is %s, I live in city %s.' % (name, city)
'My name is tom, I live in beijing.'

如果有多個引數,需要將所有的引數儲存在一個元組中;如果只有一個引數,可以不用儲存在元組中,舉例如下:

>>> name = 'tom'
>>> 'My name is %s.' % name
'My name is tom.'
  • 在第 2 行,只有一個引數,可以不用將引數封裝在元組中

5.4 佔位符

% 是一個特殊的符號,後面跟著一個字元用於說明引數的型別:

  • %s 表示字串
  • %d 表示整數
  • %f 表示浮點數

有多種型別的佔位符,初學時需要掌握如下常用的佔位符:

符號 描述
%% 用於表示 %
%c 格式化字元及其ASCII碼
%s 格式化字串
%d 格式化整數
%f 格式化浮點數
  1. %s 用於格式化字串
>>> name = 'tom'
>>> 'name is %s' % name
'name is tom'
  1. %d 用於格式化整數
>>> integer = 123
>>> 'integer is %d' % integer
'integer is 123'
  1. %f 用於格式化浮點數
>>> float = 123.456
>>> 'float is %f' % float
'float is 123.456000'
  1. %% 用於表示字元 % 本身
>>> a = 3
>>> b = 2
>>> c = a % b
>>> '%d %% %d = %d' % (a, b, c)
3 % 2 = 1

%% 是一個特殊的佔位符,表示字元 % 本身。

在實踐中,通常使用 print 方法輸出將格式化後的字串,示例如下:

>>> name = 'tom'
>>> city = 'beijing'
>>> print('My name is %s' % name)
My name is tom
>>> print('My name is %s, I live in city %s.' % (name, city))
My name is tom, I live in beijing.

6. 小結

字串和數值一樣,同樣有基本的運算方式,但是最終得到的結果形式和數值卻略有不同,大家在使用的時候要注意這一點。字串的常用方法也需要大家多多練習和使用,可以把正文中的程式碼多敲幾遍,一個好的程式設計師就是要多敲程式碼才能成長。