何謂元組
元組(tuple)簡單的來說就是由多個元素所組成的群組,元組的成員可以由不同型別的資料型別來組成。元組宣告後就不可以更改,其序列是固定的;讀取元組內含的元素時,使用的註標即建立時的順序。元組與之前介紹的串列結構相同,只是元素個數及元素值都不能改變,所以希望能保護資料時,就可採用元組。
元組的宣告
元組的宣告是以 「,」 逗號,區隔各個元素。語法如下:
# 方法 1
元組 = 元素A, 元素B, 元素C, …
# 方法 2
元組 = (元素A, 元素B, 元素C, …)-
宣告空元組時一定要使用小括號。
tuple1 = #錯誤宣告 tuple2 = () #宣告空元組 -
宣告只有一個元素的元組,需要在元素之後加上逗號。
# 不加逗號「也 OK」,通常是因為寫成 x = (25) 時程式不會報錯,但此時它的型態已經變成一般的整數(int),而不是元組(tuple)。 # 在 Python 中,真正決定一個物件是不是元組的,是「逗號 ','」,而不是「括號 ()」 tuple1 = 25, tuple2 = (25,) tuple3 = (25) tuple4 = 25 print(type(tuple1)) # <class 'tuple'> print(type(tuple2)) # <class 'tuple'> print(type(tuple3)) # <class 'int'> print(type(tuple4)) # <class 'int'>
元組常用的函式
下表為元組常用的函式,可用來進行比較元素、元組轉換串列、傳回元組中最大值或最小值…等相關元組的進階操作。
| 函式 | 說明與範例 |
|---|---|
sum() | 功能:傳回元組內所有元素的總和,num 值為指定參與計算的整數引數,若未指定則預設值為 0。語法: sum(tuple, [num])簡例: t1 = (10, 20, 30)print(sum(t1, 40)) 輸出結果 100 |
max() | 功能:傳回元組內元素最大者。 語法: max(tuple)簡例: t1 = (10, 20, 30)print(max(t1)) 輸出結果 30 |
min() | 功能:傳回元組內元素最小者。 語法: min(tuple)簡例: t1 = (10, 20, 30)print(min(t1)) 輸出結果 10 |
tuple() | 功能:將串列轉換成元組。 語法: tuple(list)簡例: list1 = [10, 20, 30]print(tuple(list1)) 輸出結果 (10, 20, 30) |
list() | 功能:將元組轉換成串列。 語法: list(tuple)簡例: tuple1 = (10, 20, 30)print(list(tuple1)) 輸出結果 [10, 20, 30] |
len() | 功能:回傳元組的元素個數。 語法: len(tuple)簡例: tuple1 = (10, 20, 30)print(len(tuple1)) 輸出結果 3 |
count() | 功能:回傳元組中指定元素值的出現次數。 語法: tuple.count(元素值)簡例: tuple1 = (10, 20, 30)print(tuple1.count(20)) 輸出結果 1 |
sorted() | 功能:將元組中元素遞增排序後回傳,回傳值為串列型別。 語法:排序後串列 = sorted(tuple)簡例: tuple1 = (20, 10, 30)print(sorted(tuple1)) 輸出結果 [10, 20, 30] |
tuple.py
# 傳回元組內所有元素的總和 t1 = (10, 20, 30) print(sum(t1, 40)) # 100 # 傳回元組內元素最大者 print(max(t1)) # 30 # 傳回元組內元素最小者 print(min(t1)) # 10 # 將串列轉換成元組 list1 = [10, 20, 30] print(tuple(list1)) # 輸出: 元組 (10, 20, 30) # 將元組轉換成串列 tuple1 = (10, 20, 30) print(list(tuple1)) # 輸出: 串列 [10, 20, 30] # 回傳元組的元素個數 print(len(tuple1)) # 輸出: 3 # 回傳元組中指定元素值的出現次數 print(tuple1.count(20)) # 輸出: 1 # 將元組中元素遞增排序後回傳,回傳值為串類型別 tuple1 = (20, 10, 30) print(sorted(tuple1)) # 輸出: [10, 20, 30]
元組基本操作
元組在程式中可以進行簡單的操作,以下用實例配合說明,來瞭解元組的基本操作。
[例] 元組基本操作。 (tuple_1.py)
tuple_1.py
tuple1 = ('東','南','西') print(tuple1) # ('東', '南', '西') East,South,West = tuple1 # 解構 print(South) # 南 tuple2 = tuple1 + ('北',) print(tuple2) # ('東', '南', '西', '北') tuple1,tuple2 = tuple2,tuple1 # 交換 print(tuple1) # ('東', '南', '西', '北') print(tuple2) # ('東', '南', '西') print(len(tuple1)) # 4 del(tuple2) #print(tuple2) # tuple2 已被刪除 list1 = list(tuple1) list1.append('東北') print(list1) # ['東', '南', '西', '北', '東北'] tuple1 = tuple(list1) print(tuple1) # ('東', '南', '西', '北', '東北') print(tuple1[0]) # 東 print('東北' in tuple1) # True for t in tuple1: print(t, end=',') # 東,南,西,北,東北,
[簡例] 請撰寫程式從二維元組中讀取購物清單,清單內的資料分別是品名、數量及單價。顯示清單上的資料並計算小計,最後計算總計。 (shop.py)
[結果]
品 名 數 量 單 價 小 計
香蕉 34 2 68
芭樂 28 3 84
水梨 50 2 100
總 計: 252 shop.py
# 指定檔案編碼為 UTF-8,確保程式能正確處理中文文字 # -*- coding: utf-8 -*- # 定義商品資料元組(tuple),每個項目包含:(品名, 數量, 單價) data = (('香蕉', 34, 2), ('芭樂', 28, 3), ('水梨', 50, 2)) # 建立一個空的列表(list),用來儲存每樣商品的小計金額 total = [] # 印出表格的標題列,使用 \t (Tab) 進行欄位分隔與對齊 print ('品 名\t數 量\t單 價\t小 計') for t1 in data: # 使用 for 迴圈逐一取出 data 中的每一組商品資料 (元組) # 解構賦值:將 t1 的三個元素分別解包指派給 name (品名)、s1 (數量)、s2 (單價) name,s1,s2 = t1 # 計算該項商品的小計金額 (單價 * 數量),並將結果新增至 total 列表中 total.append(s1 * s2) # 印出單列商品資訊:字串(String):預設靠左對齊。 數字(Number):預設靠右對齊 # `print()` 並透過格式化對齊時: # - {name:>4}: 品名靠右對齊,佔據 4 個字元寬度 # - {s1:8}: 數量靠右對齊,佔據 8 個字元寬度 # - {s2:8}: 單價靠右對齊,佔據 8 個字元寬度 # - {total[-1]:8}: 印出最新加入的小計金額 (-1 索引最後一個(total 列表的最後一個元素)),靠右對齊佔 8 個字元 print(f'{name:>4}{s1:8}{s2:8}{total[-1]:8}') # 使用 sum(total) 加總所有商品的小計,並靠右對齊格式化印出總金額(寬度占 23 個字元) print(f'總 計:{sum(total):23}')
相關主題與延伸閱讀
- 2. 字典:字典是另一種常用的容器資料型別,元組常作為字典的鍵值使用。
- 3. 集合:同屬容器資料結構,可比較集合的無序特性與元組的有序特性。
- 4. 元組、字典和集合的比較與使用時機:統整元組、字典、集合三者的選用時機與效能考量。
- 6. 二維串列:元組與串列操作類似,可對照串列的可變性與元組的不可變性。
- 4. 串列的函式與方法:元組可與串列互相轉換,複習串列常用的操作函式。