tuple
序列容器操作¶tuple
也是存放序列性資料的結構。語法使用逗號 ,
分隔資料元素,用小括號(parentheses)(
)
成對包住所有元素,但括號可以省略。 tuple
可以是巢狀多維度的,同一個 tuple
中也可以存放異質類型資料,通常使用在函式參數的傳遞與回傳。
元素內容是按照儲存順序的 index 存取,語法為 [ index ]
。 如果按照由前往後的順序,第一個元素 index 是0,依次往後遞增; 如果反過來由後往前存取,最後一個元素 index 可以用-1,依次向前遞減。
Tuple 範例 | 說明 |
---|---|
() |
空的 tuple |
('code',) |
單一元素的 tuple |
(5, 6, 7, 8) |
四個數字元素的 tuple |
('code', (42, 3.1415), 1.23, {}) |
巢狀、異質的 tuple |
'code', 42, 3.1415, 1.23 |
括號可以省略 |
tuple()
可以用來建構一個新的tuple。len()
可以用來回傳容器裡的元素個數。min()
可以用來回傳容器中最小的元素。max()
可以用來回傳容器中最大的元素。tuple
在建立後,元素內容不可以就地變更(immutable)。 tuple
是序列容器,所以一般 immutable 序列容器的共同方法都可以用,參閱官方文件 Common Sequence Operations。
tuple
是不能 In-Place 就地變更的序列容器。¶T = 123, '345', (5, 67), 7.89
print('T = {}.'.format(T))
T = (123, '345', (5, 67), 7.89).
# 可以用索引讀取,但想要變更元素值一定會出現 TypeError
#T[-1] = 987
print('the last element is {}'.format(T[-1]))
the last element is 7.89
# 但 tuple 裡面可以放 mutable 的物件
T = [123], ['345'], [5, 67], [7.89]
print('T = {}.'.format(T))
T = ([123], ['345'], [5, 67], [7.89]).
# tuple 裡的 mutable 物件內容當然可以 in-place 修改
T[-1][0] = 987
print('the last element is now {}'.format(T[-1]))
the last element is now [987]
# 串接
T += [6, 54], ['32']
print('T = {}.'.format(T))
T = ([123], ['345'], [5, 67], [987], [6, 54], ['32']).
# 重複複製
T = T[:3] * 3
print('T = {}.'.format(T))
T = ([123], ['345'], [5, 67], [123], ['345'], [5, 67], [123], ['345'], [5, 67]).
# tuple 的成員不能 in-place 修改,
T[2] = 'X'
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-7-12b6efc4295e> in <module> 1 # tuple 的成員不能 in-place 修改, ----> 2 T[2] = 'X' TypeError: 'tuple' object does not support item assignment
# 但元素是 mutable 的其元素可以 in-place 修改
T[2][0] = 'X'
print('T = {}.'.format(T))
T = ([123], ['345'], ['X', 67], [123], ['345'], ['X', 67], [123], ['345'], ['X', 67]).
# slicing 指定從原本的片段中產生新的 list 物件
T = T[1:4]
print('T = {}.'.format(T))
T = (['345'], ['X', 67], [123]).
# 卸載常見於函式的回傳值
a, b, c = T
print('a = {}, b = {}, c = {}.'.format(a, b, c))
a = ['345'], b = ['X', 67], c = [123].
tuple
這樣的容器¶有 list
這麼方便好用的容器了,為甚麼還需要 tuple
這種限制多、操作方法少的容器?
tuple
不能就地變更 (immutability) 的特性,對於維護程式中資料的完整性 (integrity) 是有幫助的。dict
容器的 key 可以是 tuple
但不能用 list
。