在 Python 中,列表(list)、元組(tuple) 和 字典(dictionary) 是三種不同的資料結構,各自有其特性與使用情境:
🔸 列表(List)
- 可變動(Mutable):列表是可變的,表示建立後可以更改其內容。你可以自由新增、刪除或修改其中的元素。
- 有順序(Ordered):列表中的元素是有順序的,可透過索引來存取。索引從 0 開始。
- 語法:使用中括號
[]
建立,例如:my_list = [1, 2, 3, 'hello']
🔸 元組(Tuple)
- 不可變動(Immutable):元組是不可變的,建立後其中的內容無法更動。無法新增、刪除或修改元素。
- 有順序(Ordered):與列表類似,元組中的元素有順序,也可透過索引存取。
- 語法:使用小括號
()
建立,例如:my_tuple = (1, 2, 3, 'hello')
🔸 字典(Dictionary)
- 可變動(Mutable):字典是可變的,它是一種鍵值對(key-value)的集合。
- 無順序(Unordered):字典中的元素沒有固定順序,無法使用索引取值,而是透過「鍵」來取得對應的「值」。
- 語法:使用大括號
{}
建立,鍵與值用冒號:
分隔,例如:my_dict = {'name': 'Alice', 'age': 30}
🔹 使用差異(Differences)
- 當你需要一組可以修改、排序,並透過索引存取的資料時,使用 List。
- 當你需要一組不應該改變的固定資料時,使用 Tuple。
- 當你需要以鍵值對方式儲存資料,並快速透過鍵查詢值時,使用 Dictionary。
程式碼範例
- 列表(List
todos = ['寫作業', '閱讀文件', '運動']
todos.insert(1, '買菜') # 在索引 1 處插入新項目
todos.remove('閱讀文件') # 刪除指定項目
print(len(todos)) # 印出目前清單長度 => 3
print(todos) # 印出 ['寫作業', '買菜', '運動']
- 元組(Tuple)
workdays = ('Mon', 'Tue', 'Wed', 'Thu', 'Fri')
print(workdays[4])# 存取第五個元素 => 'Fri'
# 以下操作會出錯,因為元組不可變動:
workdays[2] = 'Sat'
=> TypeError: 'tuple' object does not support item assignment
- 字典(Dictionary)
grades = {'Tom': 85, 'Mary': 92, 'John': 78}
grades['John'] += 5 # 將 John 的分數加 5
grades['Lisa'] = 88 # 新增一位學生 Lisa
for name, score in grades.items():
print(f"{name} 的分數是 {score}")
# 以下是每一個人的分數
# Tom 的分數是 85
# Mary 的分數是 92
# John 的分數是 83
# Lisa 的分數是 88
小測驗(選擇題 + 解答)
Q1. 下列哪個 List 操作是「合法」的?A. my_list = [1,2,3]; my_list[3] = 4
B. my_list = [1,2,3]; my_list.append(4)
C. my_list = [1,2,3]; my_list.remove(4)
D. my_list = [1,2,3]; del my_list
答案: B. 使用
append
新增元素是合法的(A 會超出索引;C 會因元素不存在拋錯;D 會刪除整個變數)
Q2. 下面程式執行結果為何?
t = (10, 20, 30)
print(t.count(20))
A. 0
B. 1
C. 2
D. 錯誤
答案: B. 元組的
count
方法會回傳指定值出現的次數,此處是 1。
Q3. 下列哪一種情況最適合用字典(Dictionary)?
A. 需儲存學生名單並依序處理。 B. 需儲存設定選項,每個選項有名稱與對應值。 C. 需儲存固定不變的座標點集合。 D. 需保持一連串可重複的數值序列。
答案: B. 設定選項適合用鍵值對表示,用字典最有效率。
Q4. 下列哪些型別「不能」當作字典的鍵?(可複選)
A. 123(整數)
B. "hello"(字串)
C. [1, 2, 3](列表)
D. (1, 2, 3)(元組)
答案: C. 列表是可變的,不能當鍵;其餘皆為不可變,可作鍵。
任務挑戰: 建立字典管理聯絡人
- 建立一個字典,鍵為聯絡人姓名,值為電話號碼。
- 更新其中一位聯絡人的號碼。
- 刪除某個聯絡人。
- 列印所有聯絡人及對應電話。
答案以下
contacts = {'Alice': '0912345678', 'Bob': '0987654321', 'Jay':'091234567'}
contacts['Alice'] = '0999888777'
del contacts['Bob']
for name, phone in contacts.items():
print(name, phone)
# 輸出
#Alice 0999888777
#Jay 091234567
額外問題
.items()是什麼?用來取得字典中的 所有鍵值對(Key-Value)
Alice 0912345678
Jay 091234567
#對應 name, phone 來自dictionary
額外資源教學
Figma UX/UI手機App設計教學:點子成行到製作出一個App 系列教學 -https://vocus.cc/article/663ddefafd89780001db6e7c
如何用FIgma製作個人作品集教學
- https://vocus.cc/article/645c733dfd89780001ffe890
影片教學
JayLinXR YT: https://www.youtube.com/@jaylinxr