以下是Python基礎學習第三課的完整內容,重點講解數據結構(列表、字典、元組、集合)和文件操作,通過實例演示如何高效管理和操作數據:
?
Python基礎學習第三課:數據結構與文件操作
?
一、課程目標
?
1. 掌握四種核心數據結構:列表(list)、字典(dict)、元組(tuple)、集合(set)
2. 理解數據結構的特性及適用場景
3. 學會文件的讀寫操作(文本文件處理)
?
二、數據結構詳解
?
1. 列表(List):有序、可變的序列
?
- 特點:用方括號
"[]"定義,元素可重復、可修改、按插入順序存儲。
- 常用操作:
# 創建列表
fruits = ["apple", "banana", "orange"]
?
# 訪問元素(索引從0開始)
print(fruits[0]) # 輸出: apple
?
# 修改元素
fruits[1] = "grape" # 修改后: ["apple", "grape", "orange"]
?
# 添加元素
fruits.append("pear") # 末尾追加: ["apple", "grape", "orange", "pear"]
fruits.insert(1, "kiwi") # 在索引1處插入: ["apple", "kiwi", "grape", "orange", "pear"]
?
# 刪除元素
fruits.remove("grape") # 刪除首個匹配項
fruits.pop(0) # 刪除并返回索引0的元素
fruits.clear() # 清空列表
?
# 遍歷列表
for fruit in fruits:
? ? print(fruit)
- 嵌套列表:列表中的元素也可以是列表(二維數組)。
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(matrix[1][2]) # 輸出: 6(第2行第3列)
?
2. 字典(Dict):鍵值對集合
?
- 特點:用花括號
"{}"定義,通過鍵(key)快速訪問值(value),鍵必須唯一且不可變(如字符串、數字、元組)。
- 常用操作:
# 創建字典
user = {"name": "Alice", "age": 25, "city": "New York"}
?
# 訪問值
print(user["name"]) # 輸出: Alice
?
# 修改值
user["age"] = 26 # 更新年齡
?
# 添加鍵值對
user["job"] = "Engineer" # 新增鍵"job"
?
# 刪除鍵值對
del user["city"] # 刪除鍵"city"
user.pop("age") # 刪除并返回鍵"age"的值
?
# 遍歷字典
for key, value in user.items():
? ? print(f"{key}: {value}")
- 應用場景:存儲用戶信息、配置參數、JSON數據解析等。
?
3. 元組(Tuple):有序、不可變的序列
?
- 特點:用圓括號
"()"定義(或直接賦值逗號分隔),元素不可修改,適合存儲不應被更改的數據。
- 常用操作:
# 創建元組
coordinates = (10, 20)
?
# 訪問元素
print(coordinates[0]) # 輸出: 10
?
# 元組解包
x, y = coordinates # x=10, y=20
?
# 遍歷元組
for coord in coordinates:
? ? print(coord)
- 與列表的區別:元組更輕量,適合作為字典的鍵(因不可變),或保護數據不被意外修改。
?
4. 集合(Set):無序、唯一的元素集合
?
- 特點:用花括號
"{}"定義(注意:空集合需用
"set()"創建,
"{}"表示空字典!),自動去重,支持集合運算(并集、交集等)。
- 常用操作:
# 創建集合
unique_numbers = {1, 2, 3, 3, 2} # 實際存儲: {1, 2, 3}
?
# 添加元素
unique_numbers.add(4) # {1, 2, 3, 4}
?
# 刪除元素
unique_numbers.remove(2) # 若元素不存在會報錯
unique_numbers.discard(5) # 安全刪除(元素不存在也不報錯)
?
# 集合運算
set1 = {1, 2, 3}
set2 = {3, 4, 5}
print(set1 | set2) # 并集: {1, 2, 3, 4, 5}
print(set1 & set2) # 交集: {3}
print(set1 - set2) # 差集: {1, 2}
- 應用場景:快速去重、成員關系測試(如判斷單詞是否拼寫正確)。
?
三、文件操作:讀寫文本文件
?
1. 文件讀寫流程
?
1. 打開文件 → 2. 讀寫數據 → 3. 關閉文件(避免資源泄漏)。
? ?- 推薦使用
"with"語句:自動管理文件關閉,無需手動調用
"close()"。
?
2. 示例代碼
?
寫入文件
?
# 寫入文本(覆蓋原有內容)
with open("example.txt", "w", encoding="utf-8") as file:
? ? file.write("Hello, Python!\n")
? ? file.write("這是第二行。\n")
?
# 追加內容(不覆蓋)
with open("example.txt", "a", encoding="utf-8") as file:
? ? file.write("這是追加的內容。\n")
?
讀取文件
?
# 逐行讀取
with open("example.txt", "r", encoding="utf-8") as file:
? ? for line in file:
? ? ? ? print(line.strip()) # strip()去除行尾換行符
?
# 讀取全部內容為字符串
with open("example.txt", "r", encoding="utf-8") as file:
? ? content = file.read()
? ? print(content)
?
3. 文件模式說明
?
模式 含義
?
""r"" 只讀(默認模式)
?
""w"" 寫入(覆蓋原有內容)
?
""a"" 追加(在文件末尾添加內容)
?
""r+"" 讀寫(文件指針在開頭)
?
""b"" 二進制模式(如
""rb""或
""wb"")
?
四、綜合案例:學生成績管理系統(簡化版)
?
結合列表、字典和文件操作,實現成績的增刪改查:
?
def add_student(scores_dict):
? ? name = input("請輸入學生姓名:")
? ? score = float(input("請輸入分數:"))
? ? scores_dict[name] = score
? ? print(f"已添加 {name} 的成績:{score}")
?
def show_scores(scores_dict):
? ? print("當前成績單:")
? ? for name, score in scores_dict.items():
? ? ? ? print(f"{name}: {score}")
?
def save_to_file(scores_dict, filename="scores.txt"):
? ? with open(filename, "w", encoding="utf-8") as file:
? ? ? ? for name, score in scores_dict.items():
? ? ? ? ? ? file.write(f"{name},{score}\n")
? ? print("成績已保存到文件!")
?
def load_from_file(filename="scores.txt"):
? ? scores_dict = {}
? ? try:
? ? ? ? with open(filename, "r", encoding="utf-8") as file:
? ? ? ? ? ? for line in file:
? ? ? ? ? ? ? ? name, score = line.strip().split(",")
? ? ? ? ? ? ? ? scores_dict[name] = float(score)
? ? ? ? print("成績已從文件加載!")
? ? except FileNotFoundError:
? ? ? ? print("文件不存在,將創建新文件。")
? ? return scores_dict
?
# 主程序
scores = load_from_file()
while True:
? ? print("\n學生成績管理系統")
? ? print("1. 添加成績")
? ? print("2. 查看成績")
? ? print("3. 保存到文件")
? ? print("4. 退出")
? ? choice = input("請選擇操作:")
? ??
? ? if choice == "1":
? ? ? ? add_student(scores)
? ? elif choice == "2":
? ? ? ? show_scores(scores)
? ? elif choice == "3":
? ? ? ? save_to_file(scores)
? ? elif choice == "4":
? ? ? ? break
? ? else:
? ? ? ? print("無效選擇,請重試!")
?
五、課后練習
?
1. 基礎題:
? ?- 創建一個列表存儲5個學生的姓名,用
"for"循環打印每個姓名。
? ?- 定義一個字典存儲3門課程及其分數(如
"{"數學": 90, "英語": 85}"),計算總分。
2. 進階題:
? ?- 用集合去重:輸入一個包含重復數字的列表,輸出去重后的列表。
? ?- 修改學生成績管理系統,支持按姓名查詢和刪除成績。
?
六、常見問題解答
?
1. Q:列表和元組有什么區別?什么時候用元組?A:列表可變,適合需要頻繁修改的數據;元組不可變,適合存儲常量或作為字典的鍵。
2. Q:字典的鍵為什么必須是不可變類型?A:因為字典通過哈希表實現,鍵的哈希值需固定不變,否則無法正確索引。
3. Q:文件操作后忘記關閉會怎樣?A:可能導致資源泄漏(文件被占用),用
"with"語句可避免此問題。
?
通過本課,你已掌握Python數據管理的核心技能!下一步將學習函數高級用法和模塊化編程,構建更復雜的項目。 💻