Python 元組 (tuple) 型別詳解:建立、操作、特性與應用

Python 元組 (tuple) 型別詳解:建立、操作、特性與應用

在 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()
修改 不允許 允許 (新增、刪除、修改)
效能 通常比串列略快 (因為不可變) 略慢
可雜湊性 可雜湊 (可以用作字典的鍵或集合的元素) 不可雜湊
用途
  • 表示固定不變的資料 (例如,座標、日期、RGB 顏色)
  • 作為字典的鍵
  • 函數返回多個值 (實際上是返回一個元組)
  • 資料安全性要求較高的情況
  • 儲存需要修改的資料
  • 需要頻繁新增、刪除元素的情況
  • 元組的應用

    • 表示固定不變的資料: 例如,座標 (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) 是一種有序、不可變的序列型別。 了解元組的特性、操作以及與串列的區別,可以幫助您在適當的場景下選擇使用元組或串列,寫出更安全、更有效率的程式碼。

    張貼留言

    較新的 較舊