@[toc]
Python序列型数据结构详解:列表、元组与实战成绩系统
序列型数据结构是Python编程的核心基础之一,尤其对初中级开发者至关重要。本文将系统讲解列表(List)、元组(Tuple)的概念与应用,并通过学生成绩管理系统实战巩固知识。
列表(List) - 动态有序容器
列表是Python中最灵活的序列类型,可变、有序且支持多种数据类型。
# 创建列表
student_names = ["李明", "张华"] # ['李明', '张华']
# 列表拼接
scores = [85, 92] + [78] # scores: [85, 92, 78]
# 增删改查操作
student_names.append("王芳") # 末尾添加 → ["李明","张华","王芳"]
student_names.insert(1, "赵强") # 插入位置1 → ["李明","赵强","张华","王芳"]
scores[0] = 90 # 修改索引0的值 → [90, 92, 78]
del student_names[2] # 删除索引2 → ["李明","赵强","王芳"]
print(scores.pop()) # 弹出末尾元素 → 78
Python切片操作
data = [10, 20, 30, 40, 50, 60]
#左闭右开
print(data[1:4]) # 切片索引1-3 → [20,30,40]
print(data[:3]) # 前三个 → [10,20,30]
print(data[::2]) # 步长2 → [10,30,50]
reverse_data = data[::-1] # 步长为负一,相当于反转列表 → [60,50,40,30,20,10]
深浅拷贝详解
import copy
original = [[1,2], [3,4]]
shallow = original[:] # 浅拷贝
deep = copy.deepcopy(original) # 深拷贝
original[0][0] = 99
print(shallow) # [[99,2],[3,4]] - 嵌套列表受影响
print(deep) # [[1,2],[3,4]] - 完全独立
元组(Tuple) - 不可变序列
元组与列表相似,但创建后不可修改,适合存储不应更改的数据。
# 创建元组
student = ("李明", 19, "计算机科学")
empty_tuple = ()
single_tuple = ("单个元素",) # 注意末尾逗号
# 不可变性验证
try:
student[1] = 20 # 抛出TypeError
except TypeError:
print("元组不可修改!")
# 解包操作
name, age, major = student
print(f"{name}主修{major}") # 李明主修计算机科学
命名元组(Namedtuple)
提升元组的可读性:
from collections import namedtuple
# 创建学生类型
Student = namedtuple("Student", ["name", "age", "gpa"])
# 实例化
s = Student(name="王芳", age=20, gpa=3.8)
print(s.name) # 王芳
print(s._asdict()) # 转为字典: {'name':'王芳','age':20,'gpa':3.8}
实战:学生成绩管理系统
# 系统初始化
students = [] # 用列表存储学生信息
while True:
print("\n===== 成绩管理系统 =====")
print("1.添加学生 2.查看所有 3.查询成绩 4.修改成绩 5.退出")
choice = input("请选择操作: ")
# 添加学生信息
if choice == "1":
name = input("姓名: ")
score = float(input("成绩: "))
students.append((name, score)) # 使用元组存储单条记录
print(f"{name}添加成功!")
# 显示所有记录
elif choice == "2":
if not students:
print("暂无记录")
for i, (name, score) in enumerate(students, 1):
print(f"{i}. {name}: {score}")
# 按姓名查询
elif choice == "3":
name = input("查询姓名: ")
found = [(n, s) for n, s in students if n == name]
if found:
for n, s in found:
print(f"{n}的成绩: {s}")
else:
print("未找到记录")
# 修改成绩(利用元组不可变性)
elif choice == "4":
name = input("修改谁的分数: ")
for index, (n, s) in enumerate(students):
if n == name:
new_score = float(input("新分数: "))
# 创建新元组替换旧元组
students[index] = (n, new_score)
print("修改成功!")
break
else:
print("未找到学生")
# 退出系统
elif choice == "5":
print("系统退出")
break
系统功能亮点:
- 使用
(name, score)元组确保单个学生数据的不可变性 - 使用列表实现动态数据管理
- 综合应用枚举、列表推导式等技巧
- 修改数据时创建新元组替换原元素
最佳实践建议
- 需要修改数据时选择列表
- 需要保护数据完整性时使用元组
- 数据关系清晰时使用命名元组
- 嵌套结构优先考虑深拷贝
- 大规模数据处理时切片性能更优
下期预告:8.Python的键值对与集合实战指南
我们将深入探讨:
- 字典(dict)的高效键值对操作
- 集合(set)的去重与集合运算
- JSON数据与字典的转换技巧
- 实际案例:构建城市信息数据库系统
掌握这些核心数据结构,你将能高效处理Python编程中的各类数据场景!
更多技术干货欢迎关注微信公众号“科威舟的AI笔记”~
【转载须知】:转载请注明原文出处及作者信息