>
深入學習 Python 的核心資料結構:列表、字典、元組、集合、函數與例外處理機制。本教學將帶領您從基礎到進階,掌握 Python 程式設計的必備技能。
列表是 Python 中最基本且最常用的資料結構。它是一個有序、可變的集合,可以儲存不同類型的元素。建立列表使用方括號 [],元素之間以逗號分隔。
# 建立列表 fruits = ["蘋果", "香蕉", "橘子"] numbers = [1, 2, 3, 4, 5] mixed = [1, "你好", 3.14, True] print(fruits) # 輸出: ['蘋果', '香蕉', '橘子'] print(numbers[0]) # 輸出: 1 print(fruits[-1]) # 輸出: 橘子(倒數第一個)
# 新增元素
fruits.append("葡萄") # 末端新增
fruits.insert(1, "草莓") # 在索引1位置插入
# 刪除元素
fruits.remove("香蕉") # 移除指定值
popped = fruits.pop() # 移除末端元素並返回
# 排序與反轉
numbers.sort() # 原地排序
numbers.reverse() # 原地反轉
# 其他常用操作
len(fruits) # 列表長度
fruits.count("蘋果") # 計算元素數量
fruits.index("橘子") # 取得元素索引
字典是一個鍵值對(key-value)的無序集合。每個鍵都唯一對應一個值,類似於現實生活中的字典查找功能。建立字典使用花括號 {}。
# 建立字典
person = {
"name": "小明",
"age": 25,
"city": "台北"
}
# 訪問值
print(person["name"]) # 輸出: 小明
print(person.get("age")) # 輸出: 25
# 使用 get 方法的安全訪問
print(person.get("job", "未知")) # 輸出: 未知(鍵不存在時)
# 新增/修改鍵值對
person["job"] = "工程師" # 新增
person["age"] = 26 # 修改
# 刪除鍵值對
del person["city"] # 刪除指定鍵
popped = person.pop("age") # 刪除並返回值
# 遍歷字典
for key, value in person.items():
print(f"{key}: {value}")
# 其他常用方法
person.keys() # 所有鍵
person.values() # 所有值
person.items() # 所有鍵值對
person.clear() # 清空字典
元組與列表類似,但它是不可變的(immutable)。一旦創建後就不能修改,這使得元組適合儲存不應該被改變的資料。元組使用圓括號 () 建立。
# 建立元組
coordinates = (10, 20)
rgb_color = (255, 128, 0)
single_item = (42,) # 單元素元組需要逗號
# 訪問元素
print(coordinates[0]) # 輸出: 10
print(coordinates[1]) # 輸出: 20
# 解包(Unpacking)
x, y = coordinates
print(f"x={x}, y={y}") # 輸出: x=10, y=20
| 特性 | 元組 | 列表 |
|---|---|---|
| 語法 | () | [] |
| 可變性 | 不可變 | 可變 |
| 效能 | 較快 | 較慢 |
| 用途 | 固定資料、座標 | 動態集合 |
集合是一個無序且不重複的元素集合。當您需要儲存唯一值或進行集合運算(如聯集、交集)時,集合是最佳選擇。建立集合使用花括號 {},但不以鍵值對形式。
# 建立集合
fruits_set = {"蘋果", "香蕉", "橘子"}
numbers_set = {1, 2, 3, 4, 5}
# 添加與移除
fruits_set.add("葡萄") # 添加元素
fruits_set.remove("香蕉") # 移除元素(不存在會報錯)
fruits_set.discard("草莓") # 移除元素(不存在不報錯)
# 集合運算
a = {1, 2, 3}
b = {2, 3, 4}
print(a | b) # 聯集: {1, 2, 3, 4}
print(a & b) # 交集: {2, 3}
print(a - b) # 差集: {1}
print(a ^ b) # 對稱差集: {1, 4}
# 快速去除重複元素 data = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4] unique_data = list(set(data)) print(unique_data) # 輸出: [1, 2, 3, 4] # 成員判斷(非常高效) print(3 in numbers_set) # 輸出: True print(10 in numbers_set) # 輸出: False
函數是組織程式碼的基本單位,它允許您將可重複使用的程式碼封裝起來。Python 使用 def 關鍵字來定義函數。
# 基本函數
def greet(name):
"""問候函數"""
return f"你好,{name}!"
# 帶預設參數的函數
def power(base, exponent=2):
"""計算次方,預設為平方"""
return base ** exponent
# 呼叫函數
message = greet("小明")
print(message) # 輸出: 你好,小明!
print(power(3)) # 輸出: 9
print(power(3, 3)) # 輸出: 27
# 多返回值
def get_stats(numbers):
"""返回多個統計值"""
return min(numbers), max(numbers), sum(numbers)
min_val, max_val, total = get_stats([1, 5, 3, 9, 2])
print(f"最小: {min_val}, 最大: {max_val}, 總和: {total}")
# 不定數量的參數
def sum_all(*args):
"""接受任意數量的引數"""
total = 0
for num in args:
total += num
return total
print(sum_all(1, 2, 3)) # 輸出: 6
print(sum_all(1, 2, 3, 4, 5)) # 輸出: 15
# 關鍵字參數
def print_info(**kwargs):
"""接受任意數量的關鍵字引數"""
for key, value in kwargs.items():
print(f"{key}: {value}")
print_info(name="小明", age=25, city="台北")
# Lambda 表達式
square = lambda x: x ** 2
print(square(5)) # 輸出: 25
# 與內建函數配合
numbers = [1, 5, 3, 9, 2]
sorted_nums = sorted(numbers, reverse=True)
print(sorted_nums) # 輸出: [9, 5, 3, 2, 1]
# 使用 lambda 進行自訂排序
students = [("小明", 85), ("小華", 92), ("小美", 78)]
sorted_students = sorted(students, key=lambda x: x[1], reverse=True)
print(sorted_students) # 輸出: [('小華', 92), ('小明', 85), ('小美', 78)]
例外處理是程式設計中不可或缺的一環。它讓您能夠優雅地處理錯誤情況,避免程式突然崩潰。Python 使用 try...except 語句來處理例外。
# 基本語法
try:
result = 10 / 0
except ZeroDivisionError as e:
print(f"錯誤:{e}") # 輸出: 錯誤:division by zero
# 多重例外處理
try:
number = int(input("請輸入數字:"))
result = 100 / number
except ValueError:
print("請輸入有效的數字!")
except ZeroDivisionError:
print("不能除以零!")
except Exception as e:
print(f"發生錯誤:{e}")
# else:當沒有發生例外時執行
try:
num = int("123")
except ValueError:
print("轉換失敗")
else:
print(f"成功轉換:{num}") # 輸出: 成功轉換:123
# finally:無論是否發生例外都會執行
try:
file = open("data.txt", "r")
content = file.read()
except FileNotFoundError:
print("檔案不存在")
finally:
print("清理資源...") # 確保資源釋放
# 定義自訂例外
class AgeError(Exception):
"""年齡驗證例外"""
def __init__(self, age, message="年齡不在有效範圍內"):
self.age = age
self.message = message
super().__init__(self.message)
# 使用自訂例外
def validate_age(age):
if age < 0 or age > 150:
raise AgeError(age)
return True
try:
validate_age(-5)
except AgeError as e:
print(f"錯誤:年齡 {e.age} {e.message}")
| 例外類型 | 說明 |
|---|---|
| SyntaxError | 語法錯誤 |
| NameError | 變數未定義 |
| TypeError | 類型不匹配 |
| IndexError | 索引超出範圍 |
| KeyError | 字典鍵不存在 |
| FileNotFoundError | 檔案不存在 |
| ValueError | 值不合法 |
了解每種資料結構的特性後,選擇合適的結構能讓程式更高效、更易維護。以下是各資料結構的適用場景:
| 資料結構 | 特性 | 適用場景 |
|---|---|---|
| 列表 List | 有序、可變、重複 | 有序集合、需要索引訪問 |
| 字典 Dict | 無序、鍵值對、快速查找 | 需要快速透過鍵查找 |
| 元組 Tuple | 有序、不可變、重複 | 固定資料、座標、多返回值 |
| 集合 Set | 無序、唯一值 | 去重、集合運算、成員判斷 |
(100, 200),使用解包語法將 x 和 y 分別取出。A = {1, 2, 3, 4} 和 B = {3, 4, 5, 6},找出兩集合的交集並計算元素數量。None 並打印提示訊息。在本教學中,我們深入探討了 Python 的五大核心資料結構:列表、字典、元組、集合,以及函數的定義與使用。同時也學習了例外處理機制,這些都是 Python 程式設計的基礎。
掌握這些知識後,您可以進一步學習:
建議您多多練習,将這些概念應用到實際項目中。熟能生巧,只有通過不斷的實踐,才能真正掌握 Python 資料結構的精髓。