以下是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数据管理的核心技能!下一步将学习函数高级用法和模块化编程,构建更复杂的项目。 💻