在 Python 程式設計中,元組 (tuple) 是一種與串列 (list) 非常相似的序列型別,但具有關鍵的區別:元組是不可變的 (immutable)。本文將詳細介紹 Python 元組的定義、建立方式、基本操作、特性、與串列的比較,以及實際應用。
什麼是元組 (tuple)?
元組是由一系列按照特定順序排列的元素組成的資料結構。元組具有以下特點:
- 有序性 (Ordered): 元組中的元素有固定的順序,可以透過索引 (index) 存取。
- 不可變性 (Immutable): 元組一旦建立後,就不能修改其內容 (不能新增、刪除或修改元素)。
- 異質性 (Heterogeneous): 元組中的元素可以是不同的資料型別。
在 Python 中,元組屬於 tuple
型別。
建立元組
有幾種方式可以建立元組:
- 使用小括號
()
(最常見): 將元素用逗號分隔,並放在小括號中。 - 使用
tuple()
函數: 將其他可迭代物件 (例如字串、串列) 轉換為元組。 - 只有一個元素時: 務必加上逗號, 例如
(5,)
# 使用小括號 ()
my_tuple = (1, 2, 3, 4, 5)
fruits = ('apple', 'banana', 'orange')
mixed_tuple = (1, 'hello', True, 3.14)
empty_tuple = ()
# 使用 tuple() 函數
string = "Hello"
char_tuple = tuple(string) # 輸出: ('H', 'e', 'l', 'l', 'o')
list_data = [10, 20, 30]
tuple_from_list = tuple(list_data) # 輸出: (10, 20, 30)
# 單元素元組
single_element_tuple = (5,) # 注意逗號
print(type(my_tuple)) # 輸出: <class 'tuple'>
重要觀念: 建立單元素元組時,必須在元素後面加上逗號,例如 (5,)
,否則 Python 會將其視為整數 5,而不是元組。
元組的基本操作
元組支援的操作與串列類似,但由於元組的不可變性,不能進行修改操作:
1. 索引 (Indexing)
與串列相同,使用方括號 []
和索引 (從 0 開始) 存取元素。
my_tuple = ('a', 'b', 'c', 'd', 'e')
print(my_tuple[0]) # 輸出: a
print(my_tuple[-1]) # 輸出: e
2. 切片 (Slicing)
與串列相同,使用 [start:end:step]
提取元組的一部分。
my_tuple = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
print(my_tuple[2:5]) # 輸出: (2, 3, 4)
print(my_tuple[::2]) # 輸出: (0, 2, 4, 6, 8)
重要觀念: tuple也可以用負數index, -1代表最後一個元素。
3. 其他常用操作
len(tuple)
: 計算tuple長度。tuple1 + tuple2
: tuple 串接。tuple * n
: 把tuple重複n次。in
,not in
: 檢查元素是否存在。index(item)
: 返回指定元素第一次出現的索引 (如果找不到會引發ValueError
)。count(item)
: 計算指定元素在串列中出現的次數。
tuple1 = (1,2,3)
tuple2 = (4,5,6)
print(len(tuple1)) # 3
print(tuple1 + tuple2) # (1,2,3,4,5,6)
print(tuple1 * 2) # (1,2,3,1,2,3)
print( 1 in tuple1) #True
print( 1 not in tuple2) #True
print(tuple1.index(2)) # 1
print(tuple1.count(1)) # 1
元組的不可變性 (Immutability)
元組最重要的特性是不可變性。這意味著一旦建立了元組,就不能修改它的內容(不能新增、刪除或修改元素)。
my_tuple = (1, 2, 3)
# 以下操作都會引發錯誤
# my_tuple[0] = 10 # TypeError: 'tuple' object does not support item assignment
# my_tuple.append(4) # AttributeError: 'tuple' object has no attribute 'append'
# del my_tuple[0] # TypeError: 'tuple' object doesn't support item deletion
不可變性的優點:
- 資料安全性: 元組的不可變性可以確保資料不會被意外修改。
- 效能: Python 可以對不可變物件進行一些優化。
- 可雜湊性 (Hashable): 元組可以用作字典的鍵 (key) 或集合的元素,而串列不行。
元組 vs. 串列
特性 | 元組 (tuple) | 串列 (list) |
---|---|---|
可變性 | 不可變 (immutable) | 可變 (mutable) |
建立方式 | () 或 tuple() |
[] 或 list() |
修改 | 不允許 | 允許 (新增、刪除、修改) |
效能 | 通常比串列略快 (因為不可變) | 略慢 |
可雜湊性 | 可雜湊 (可以用作字典的鍵或集合的元素) | 不可雜湊 |
用途 |
|
|
元組的應用
- 表示固定不變的資料: 例如,座標
(x, y)
、日期(年, 月, 日)
、RGB 顏色(紅, 綠, 藍)
等。 - 作為字典的鍵: 因為元組是不可變的,所以可以用作字典的鍵,而串列不行。
- 函數返回多個值: 函數可以返回一個元組,來間接實現返回多個值的效果。
- 資料安全性: 當您希望確保資料不會被修改時,可以使用元組。
- 格式化字串: 可以利用tuple來進行字串格式化。
# 函數返回多個值 (實際上是返回一個元組)
def get_name_and_age():
return "Alice", 30 # 相當於 return ("Alice", 30)
name, age = get_name_and_age()
print(name, age) # 輸出: Alice 30
#格式化字串
print("姓名:%s, 年齡:%d" % ("Bob", 25))
總結
Python 的元組 (tuple) 是一種有序、不可變的序列型別。 了解元組的特性、操作以及與串列的區別,可以幫助您在適當的場景下選擇使用元組或串列,寫出更安全、更有效率的程式碼。