7.Python序列型数据结构详解:列表、元组与实战成绩系统

21 阅读4分钟

@[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

系统功能亮点:

  1. 使用(name, score)元组确保单个学生数据的不可变性
  2. 使用列表实现动态数据管理
  3. 综合应用枚举、列表推导式等技巧
  4. 修改数据时创建新元组替换原元素

最佳实践建议

  1. 需要修改数据时选择列表
  2. 需要保护数据完整性时使用元组
  3. 数据关系清晰时使用命名元组
  4. 嵌套结构优先考虑深拷贝
  5. 大规模数据处理时切片性能更优

下期预告:8.Python的键值对与集合实战指南
我们将深入探讨:

  • 字典(dict)的高效键值对操作
  • 集合(set)的去重与集合运算
  • JSON数据与字典的转换技巧
  • 实际案例:构建城市信息数据库系统

掌握这些核心数据结构,你将能高效处理Python编程中的各类数据场景!

更多技术干货欢迎关注微信公众号“科威舟的AI笔记”~

【转载须知】:转载请注明原文出处及作者信息