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’ 中不包含字符串 ‘oop’,因此返回 -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 {}, I live in city {}.'
>>> text.format(name, city)
'My name is tom, I live in beijing.'
- 在第 1 行,創建變量 name
- 在第 2 行,創建變量 city
- 在第 3 行,創建字符串 text,字符串中 {} 被稱為占位符,text 中有兩個占位符
- 在第 4 行,調用字符串 text 的 format 方法,該方法有兩個參數:name 和 city
- 在第 5 行,將 text 中的兩個占位符 {} 替換為這兩個參數,得到最終的結果 ‘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 | 格式化浮點數 |
- %s 用于格式化字符串
>>> name = 'tom'
>>> 'name is %s' % name
'name is tom'
- %d 用于格式化整數
>>> integer = 123
>>> 'integer is %d' % integer
'integer is 123'
- %f 用于格式化浮點數
>>> float = 123.456
>>> 'float is %f' % float
'float is 123.456000'
- %% 用于表示字符 % 本身
>>> a = 3
>>> b = 2
>>> c = a % b
>>> '%d %% %d = %d' % (a, b, c)
3 % 2 = 1
%% 是一個特殊的占位符,表示字符 % 本身。
5.5 print 方法
在實踐中,通常使用 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. 小結
字符串和數值一樣,同樣有基本的運算方式,但是最終得到的結果形式和數值卻略有不同,大家在使用的時候要注意這一點。字符串的常用方法也需要大家多多練習和使用,可以把正文中的代碼多敲幾遍,一個好的程序員就是要多敲代碼才能成長。