4.2. 元組
接下來要介紹Python的另一個資料結構是元組,元組和串列在使用上有一些相似之處。但是,元組和串列最大的不同在於元組在建立之後就不能再修改元組的資料內容了;反之,串列在建立之後還可以持續修改串列的資料內容。因此,如果需要處理的資料在建立之後確定不被會修改時,例如:唯一值的 id 資料,則可以使用元組來儲存資料。
建立元組
元組可以透過下列幾個方式建立。
>>> t = tuple()
>>> t
()
>>> type(t)
<class 'tuple'>
>>> t = ()
>>> t
()
>>> t = (1, 2, 3, 4, 5)
>>> t
(1, 2, 3, 4, 5)
元組可以同時加入不同的資料類型。
>>> t = (1, 2, 3.0, 4.0, '5', '6')
>>> t
(1, 2, 3.0, 4.0, '5', '6')
元組中也可以包含其他元組 (i.e., tuple of tuple)。
>>> t = ((1, 2), (3.0, 4.0), ('5', '6'))
>>> t
((1, 2), (3.0, 4.0), ('5', '6'))
元組中也可以包含不同資料類型及元組。
>>> t = (1, '2', 3.0, (4, '5', 6))
>>> t
(1, '2', 3.0, (4, '5', 6))
可以使用 +、* 等算術運算子來操作元組。
>>> t = (1, 2, 3)
>>> t += (4, 5, 6)
>>> t
(1, 2, 3, 4, 5, 6)
>>> t = (1, 2, 3)
>>> t *= 2
>>> t
(1, 2, 3, 1, 2, 3)
元組建立後無法修改資料
元組在建立之後,就無法修改元組內的資料,即使使用 del 關鍵字也是如此。
>>> t = (1, 2, 3)
>>> t[0] = '1'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> del t[0]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object doesn't support item deletion
使用索引值「讀取」資料
元組只可以利用索引值來「讀取」元組中特定的資料,其索引值的範圍為 0 到 len(t) - 1,當使用的索引值超過範圍則會產生錯誤訊息。
>>> t = (1, 2, 3)
>>> t[1]
2
>>> t[3]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: tuple index out of range
使用 [ 開始: 結束: 間隔 ] 取得子元組
透過 [ 開始: 結束: 間隔 ] 可以取得一個元組的子元組。
>>> t = (1, 2, 3, 4, 5)
>>> t[0:3]
(1, 2, 3)
>>> t[:5]
(1, 2, 3, 4, 5)
>>> t[2:]
(3, 4, 5)
>>> t[1:4]
(2, 3, 4)
>>> t[0:5:2]
(1, 3, 5)
>>> t[1:5:2]
(2, 4)
>>> t[::2]
(1, 3, 5)
>>> t[:5:2]
(1, 3, 5)
>>> t[1::2]
(2, 4)
>>> t[-1::-1]
(5, 4, 3, 2, 1)
>>> t[::-2]
(5, 3, 1)
>>> l(-1:-6:-2)
(5, 3, 1)
元組的多重指派
>>> t = (1, 2.0, '3')
>>> a, b, c = t
>>> a
1
>>> b
2.0
>>> c
'3'
使用 in 判斷資料是否在元組中
要判斷某一個資料是否在元組中時,可以使用 in 關鍵字來達成。
>>> t = [1, 2.0, '3', 4, 5]
>>> 1 in t
True
>>> 2.0 in t
True
>>> 2 in t
True
>>> '3' in t
True
>>> '4' in t
False
使用 len() 取得元組長度
使用 len() 可以取得一個元組的長度。
>>> t = (1, 2, 3, 4, 5)
>>> len(t)
5
使用 index() 得到資料索引值
使用 index(x)得到「第一筆」特定資料 x 的元組索引值。
>>> t = ('a', 'b', 'c', 'b')
>>> t.index('c')
2
>>> t.index('b')
1
>>> t.index('d')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: tuple.index(x): x not in tuple
使用 count() 計算資料個數
使用 count(x) 可以計算資料 x 在元組中的個數。
>>> t = (1, 1, 1, 2, 2, 3, 4)
>>> t.count(1)
3
>>> t.count(2)
2
>>> t.count(3)
1
>>> t.count(4)
1
>>> t.count(5)
0
參考資料
- Python自動化的樂趣, 第四章, Al Sweigart 著、H&C 譯, 碁峰
- Python編程入門第3版(簡), 第七章, Toby Donaldson著, 人民郵電出版社
- 精通Python, 第三章, Bill Lubanovic著, 賴屹民譯, 歐萊禮