Python 入門 4 | 資料結構

劉晉嘉
資工系二年級
- GDG on Campus NTPU 核心幹部 技術組成員
- 擅長撰寫 C++

講座內容摘要
一、列表 (List)
1. 列表的特色
- 又稱為串列、清單。
- 有序性:列表中的元素是有序的,並且可以通過索引值查找之。
- 異構性:列表可同時包含不同類型的元素,例如數字、字符串、列表等。
- 可變性:列表中的元素可以被修改、添加或刪除。
- 動態長度:列表的大小是可變的,可以根據需要動態調整。
2. 基本操作
(1) 創建列表:使用中括號 [] 創建列表。
fruits = ["apple", "banana", "cherry"]
numbers = [1, 2, 3, 4, 5]
mixed = [1, "apple", 3.14, True]
(2) 查找元素:可透過索引值查找列表中的元素(索引值從 0 開始)。
# 承上
print(fruits[0]) # 輸出: apple
print(numbers[2]) # 輸出: 3
(3) 修改元素:可透過索引值直接修改列表中的元素(效果相當於覆蓋)。
# 承上
fruits[1] = "blueberry" # banana 會被 blueberry 取代
print(fruits) # 輸出: ['apple', 'blueberry', 'cherry']
(4) 添加元素:使用 .append() 方法將元素添加到列表末端。
# 承上
fruits.append("orange")
print(fruits) # 輸出: ['apple', 'blueberry', 'cherry', 'orange']
(5) 刪除元素:使用 .remove() 方法刪除指定的元素資料,或使用 .pop() 方法刪除指定索引值的元素。
# 承上
fruits.remove("blueberry")
print(fruits) # 輸出: ['apple', 'cherry', 'orange']
fruits.pop(1)
print(fruits) # 輸出: ['apple', 'orange']
(6) 列表長度:使用 len() 函式,可獲取列表的長度(以元素個數計算)。
# 承上
# 此時的 fruits = ['apple', 'orange']
print(len(fruits)) # 輸出: 2
二、元組 (Tuple)(不可變的 List )
1. 元組的特色
- 有序性:與列表相同,元組中的元素是有序的,且可透過索引值查找之。
- 異構性:與列表相同,元組也可以同時包含不同類型的元素。
- 不可變性:與列表不同,元組中的元素一旦創建就不能修改或增減(故元組可以保證數據的完整性,較適用於儲存不需要修改的數據,例如坐標、顏色值等)。
- 高效性:由於不可變,元組的操作速度通常比列表更快。
2. 基本操作
(1) 創建元組:可以直接使用逗號分隔元素,或使用小括號 () 創建元組。
coordinates = 10, 20
person = ("John", 30, "Engineer")
(2) 查找元素:可透過索引值查找元組中的元素(索引值從 0 開始)。
# 承上
print(coordinates[0]) # 輸出: 10
print(person[2]) # 輸出: Engineer
(3) 不可變性:元組中的元素是不可變的,不能修改。
# 承上
coordinates[0] = 15 # 無法將索引值 0 的 10 改為 15 -> 程式會報錯
三、集合 (Set)(不重複的 List )
1. 集合的特色
- 無序性:與列表、元組不同,集合中的元素是無序的,不會按照添加順序排列,故無法透過索引值查詢特定元素。
- 可變性:集合本身是可變的,可以在集合內添加或刪除元素,但集合中的元素必須是不可變的類型(如數字、字串)。
- 唯一性:集合中的元素是唯一的,重複添加的元素會被自動去除(因此可以用集合來去除列表中的重複元素,也可用以快速檢查某個元素是否在此集合中)。
- 集合操作:可以進行集合的交集、聯集和差集等操作。
2. 基本操作
(1) 創建集合:使用大括號 {} 創建集合。
fruits\_set = {"apple", "banana", "cherry"}
numbers\_set = {1, 2, 3, 4, 5}
(2) 添加元素:使用 .add() 方法添加元素到集合中。
# 承上
fruits\_set.add("orange")
print(fruits\_set) # 輸出: {'apple', 'banana', 'orange', 'cherry'}(無序)
(3) 刪除元素:使用 .remove() 方法刪除指定元素。
# 承上
fruits\_set.remove("banana")
print(fruits\_set) # 輸出: {'cherry', 'apple', 'orange'}(無序)
(4) 集合比較:
- 子集合(又稱部分集合)與超集合:當一個集合的所有元素都包含在另一個集合中,則小集合為大集合的「子集合」(subset)、大集合為小集合的「超集合」(superset)。
# 子集合與超集合
a = {1, 2, 3, 4, 5}
b = {1, 2, 3}
print(b.issubset(a)) # 即「b 是否為 a 的子集合」。輸出: True
print(a.issuperset(b)) # 即「a 是否為 b 的超集合」。輸出: True
# 集合的比較
# 承上
c = {1, 3, 2}
print(b == c) # 因為集合中的元素沒有順序性,故會輸出: True
print(b != c) # 輸出: False
(5) 集合操作:
- 交集:使用 & 或 .intersection() 方法,會建立一個新集合,包含 a、b 集合的共同元素。
a = {1, 6, 8, 10, 20}
b = {1, 3, 8, 10}
print(a & b) # 輸出: {1, 8, 10}
print(a.intersection(b)) # 輸出: {1, 8, 10}
- 聯集:使用 | 或 .union() 方法,會建立一個新集合,包含集合a、b 中所有的元素(不重複)。
# 承上
print(a | b) # 輸出: {1, 3, 6, 8, 10, 20}
print(a.union(b)) # 輸出: {1, 3, 6, 8, 10, 20}
# 過程:先加入 a 集合的所有元素,再加入 b 集合中 a 集合沒有的元素。
- 差集:使用 - 或 .difference() 方法,會建立一個新的集合,以下面程式碼為例,它將包含只在 a 集合中但不在 b 集合中的元素。
# 承上
print(a - b) # 輸出: {20, 6}
print(a.difference(b)) # 輸出: {20, 6}
# 過程:建立一個跟 a 集合相同的新集合,並將它去掉與 b 集合的共同元素。
- 對稱差集:使用 ^ 或 .symmetric_difference() 方法,會建立一個新集合,包含「只存在於 a或 b 集合中,但並非兩者共同存在」的元素。
# 承上
print(a ^ b) # 輸出: {3, 6, 20}
print(a.symmetric\_difference(b)) # 輸出: {3, 6, 20}
# 過程:建立一個新集合,包含 a、b 集合的所有元素(即聯集),然後再去掉兩者的共同元素。
四、字典 (Dictionary)(有標題的 List )
1. 字典的特色
- 鍵值對:字典是由鍵值對組成的,每個鍵(key)對應一個值(value),適合儲存有對應關係的數據,例如用戶資訊、配置參數等,而由於字典在查詢上是透過「雜湊表(hash table)」實現的,因此查找效率也很高。
- 有序性:從 Python 3.6 開始,字典從無序改為有序。
- 可變性:字典是可變的,可以修改、添加或刪除鍵值對。
- 唯一性:字典中的每個鍵是唯一的,一個鍵只能對應一個值,但多個鍵可以對應相同的值。
# 當新增一個鍵已存在的鍵值對,其值最終會被新值覆蓋
letters = {'a': 1, 'b': 2, 'a': 3} # 鍵 'a' 重複,最終值會被覆蓋為 3
print(letters) # 輸出:{'a': 3, 'b': 2}
2. 基本操作
(1) 創建字典:使用大括號 {key:value} 語法創建字典。
country2Continent = {'Taiwan': 'Asia', 'Germany': 'Europe', '阿拉伯聯合大公國' : '亞洲'}
(2) 查找元素:通過鍵查找字典中的值。
# 承上
print(country2Continent['Taiwan']) # 輸出:Asia
print(country2Continent['Germany']) # 輸出:Europe
print(country2Continent['阿拉伯聯合大公國']) # 輸出:亞洲
(3) 添加或修改元素:直接通過鍵賦值。
# 承上
country2Continent['阿拉伯聯合大公國'] = 'Asia'
print(country2Continent)
# 輸出:{'Taiwan': 'Asia', 'Germany': 'Europe', '阿拉伯聯合大公國': 'Asia'}
country2Continent['Turkey'] = 'Asia'
print(country2Continent)
# 輸出:{'Taiwan': 'Asia', 'Germany': 'Europe', '阿拉伯聯合大公國': 'Asia', 'Turkey': 'Asia'}
(4) 刪除元素:使用 del 關鍵字刪除指定鍵值對。
# 承上
# 範例:將「Turkey」國家名稱改為原文
del country2Continent['Turkey']
print(country2Continent)
# 輸出:{'Taiwan': 'Asia', 'Germany': 'Europe', '阿拉伯聯合大公國': 'Asia'}
country2Continent['Türkiye'] = 'Asia'
print(country2Continent)
# 輸出:{'Taiwan': 'Asia', 'Germany': 'Europe', '阿拉伯聯合大公國': 'Asia', 'Türkiye': 'Asia'}
辛苦啦~ 恭喜你完成了第四個【資料結構】學習單元!