12 Python 資料型別詳細篇:元組
元組是一個和列表和相似的資料型別,兩者擁有著基本相同的特性,但是也有很多不同的地方,這節課我們來詳細的介紹下元組這個資料型別
1. 簡介
1.1 定義
元組是一個有序的只讀序列,元組中所有的元素放在 () 中間,並用逗號分開,例如:
- (1, 2, 3),一個包含 3 個整數的元組
- (‘a’, ‘b’, ‘c’),一個包含 3 個字串的元組
1.2 元組與列表的區別
元組與列表很相似,都是有序的只讀序列,兩者有相同的方法和操作運算,它們的區別在於:
- 列表建立後,可以進行修改
- 元組建立後,不能進行修改
修改列表的示例如下:
>>> x = [1, 2, 3]
>> > x[0] = 11
>>> x
[11, 2, 3]
- 在第 1 行,建立了列表 x
- 在第 2 行,修改列表 x 的第 0 項元素
- 在第 3 行,顯示修改後的列表
- 在第 4 行,結果表示修改成功了
修改元組的示例如下:
>>> y = (1, 2, 3)
>>> y[0] = 11
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>> > y
(1, 2, 3)
- 在第 1 行,建立了元組 y
- 在第 2 行,修改元組 y 的第 0 項元素
- 在第 3 行,提示出現 TypeError,因為 ‘tuple’ object does not support item assignment,所以無法修改
- 在第 6 行,顯示元組 y
- 在第 7 行,結果表示元組 y 沒有被修改
1.3 特殊的元組
如果一個元組沒有包含任何元素,使用 () 表示一個空元組,例子如下:
>>> t = ()
>>> t
()
如果一個元組只包含了一個元素 item,需要在元素後加一個逗號,使用 (item, ) 表示該元組,例子如下:
>>> t = (123, )
>>> t
(123,)
注意,(123, ) 和 (123) 兩者表示不同的含義:
- (123, ) 表示的是一個元組,元組中包含一個整數 123
- (123) 表示的是一個帶括號的表示式,整數 123 嵌入括號中
兩者是不相同的,示例如下:
>>> t = (123, )
>>> i = (123)
>>> t == 123
False
>>> i == 123
True
- 在第 3 行,將元組(123,) 與整數 123 比較,結果為假
- 在第 5 行,將表示式(123) 與整數 123 比較,結果為真
1.4 元組的簡寫
當元組作在賦值操作符 = 的右邊時,可以省略括號,示例如下:
>>> t = 123, 456
>>> t
(123, 456)
>>> x = 123,
>>> x
(123, )
- 在第 1 行,建立了元組 (123, 456)
- 在第 4 行,建立了元組 (123,)
2. 常見運算操作
本節介紹對元組的最常見的幾種運算操作,包括:
2.1 運算子 +
使用運算子 + 連線兩個元組,示例如下:
>>> (1, 2) + (3, 4)
(1, 2, 3, 4)
>>> (1, 2) + (3, 4) + (5, 6)
(1, 2, 3, 4, 5, 6)
- 在第 1 行,使用運算子 + 連線兩個元組
- 在第 3 行,使用運算子 + 連線多個元組
2.2 運算子 *
使用運算子 * 將元組的元素重複,示例如下:
>>> (1, 2) * 2
(1, 2, 1, 2)
>>> 'hello' * 3
(1, 2, 1, 2, 1, 2)
- 在第 1 行,使用運算子 * 將字串重複兩次
- 在第 3 行,使用運算子 + 將字串重複三次
2.4 索引 []
通過索引 [] 獲取元組中指定位置的元素,示例如下:
>>> x = ('www', 'imooc', 'com')
>>> x[0]
'www'
>>> x[1]
'imooc'
>>> x[2]
'com'
- 在第 2 行,獲取元組 x 的第 0 個元素 ‘www’
- 在第 4 行,獲取元組 x 的第 1 個元素 ‘imooc’
- 在第 6 行,獲取元組 x 的第 2 個元素 ‘com’
2.5 索引 [:]
在 Python 中,使用語法 元組[start:end],獲取元組 元組 中在 [start, end) 範圍的子字串。注意範圍 [start, end) 包含 start,不包含 end。舉例如下:
>>> x = ('www', 'imooc', 'com')
>>> x[1]
'imooc'
>>> x[2]
'com'
>>> x[1:3]
['imooc', 'com']
- 在第 2 行,獲取元組 x 的第 1 個元素 ‘imooc’
- 在第 4 行,獲取元組 x 的第 2 個元素 ‘com’
- 在第 6 行,獲取元組 x 中從 1 開始、到 3 結束的元組 (‘imooc’, ‘com’),使用 x[1:3] 表示該範圍,注意該範圍包括字串的第 1 個元素、不包括第 3 個元素。
2.6 關鍵字 in
通過關鍵字 in 檢查元組中是否包含指定元素,示例如下:
>>> 'imooc' in ('www', 'imooc', 'com')
True
>>> 'mooc' in ('www', 'imooc', 'com')
False
- 在第 1 行,檢測字串 ‘imooc’ 在元組中
- 在第 3 行,檢測字串 ‘mooc’ 不在元組中
3. 常見函式
3.1 len(元組) 函式
使用函式 len 獲取元組的長度,示例如下:
>>> len((1, 2, 3))
3
>>> len((1, 2, 3, 4))
4
3.2 max(元組) 函式
使用函式 max 獲取元組中最大的元素,示例如下:
>>> max((1, 2))
2
>>> max((1, 3, 2))
3
3.3 min(元組) 函式
使用函式 min 獲取元組中最小的元素,示例如下:
>>> min((1, 2))
1
>>> min((1, 3, 2))
1
4. 常見方法
4.1 只有列表才支援的方法
元組與列表很相似,兩者都表示一個有序的序列,它們的區別在於:
- 列表建立後,可以進行修改
- 元組建立後,不能進行修改
因為元組不能修改,以下方法需要對列表進行修改,因此只有列表才提供:
- append(item) 方法,向列表中新增一個元素 item
- insert(index, item) 方法,用於將元素 item 插入列表的指定位置
- pop() 方法,從列表的尾部取走一個元素
- remove(item) 方法,從列表中刪除指定元素 item
- reverse() 方法,將列表中元素倒序排列
- sort() 方法,對列表中元素進行排序
4.2 index(item) 方法
index(item) 方法在元組中查詢指定元素 item,如果找到元素 item,則返回元素 item 的索引;如果找不到,則丟擲異常。示例如下:
>>> x = ('www', 'imooc', 'com')
>>> x.index('imooc')
1
>>> x.index('mooc')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: 'mooc' is not in tuple
- 在第 2 行,在元組中使用 index 方法查詢元素 ‘imooc’
- 在第 3 行,顯示元素 ‘imooc’ 在元組中的索引是 1
- 在第 4 行,在元組中使用 index 方法查詢元素 ‘mooc’
- 在第 5 行,因為元組中沒有包含元素 ‘mooc’,顯示錯誤 “ValueError: ‘mooc’ is not in tuple”
5. 小結
一定要注意元組和列表的不同之處。一定要注意元組和列表的不同之處。一定要注意元組和列表的不同之處。重要的事情說三遍。元組一般適合用來儲存不變的資料,例如學生的基本資訊,例如地圖座標資訊等等。