Python数据容器总结与对比

Python数据容器总结与对比

2026年9月16日·#编程学习/python学习笔记Python/数据结构·1994 字 10 分钟
浏览量加载中...
AI 摘要

Python五大数据容器(字符串、列表、元组、集合、字典)的特性对比与使用场景总结

Python 提供了多种数据容器来存储和操作数据,理解它们的特性差异对于选择合适的数据结构至关重要。

五大容器特性对比#

特性字符串 (str)列表 (list)元组 (tuple)集合 (set)字典 (dict)
有序性有序有序有序无序有序(3.7+)
重复元素允许允许允许不允许key不允许
可变性不可变可变不可变可变可变
索引访问支持支持支持不支持不支持
切片操作支持支持支持不支持不支持
使用场景文本处理有序可重复数据集合固定数据记录去重数据集合键值对

各容器特点详解#

字符串 (str)#

  • 有序:元素按顺序排列
  • 不可变:创建后不能修改
  • 支持索引和切片:可以访问特定位置的元素
  • 典型用途:文本处理、字符操作
s = "Hello World"
print(s[0]) # H
print(s[0:5]) # Hello

列表 (list)#

  • 有序:元素按插入顺序排列
  • 可变:可以添加、删除、修改元素
  • 允许重复:可以包含相同的元素
  • 支持索引和切片:灵活的数据访问方式
  • 典型用途:需要频繁增删改的有序数据
lst = [1, 2, 3, 2, 1]
lst.append(4) # [1, 2, 3, 2, 1, 4]
lst[0] = 10 # [10, 2, 3, 2, 1, 4]

元组 (tuple)#

  • 有序:元素按插入顺序排列
  • 不可变:创建后不能修改
  • 允许重复:可以包含相同的元素
  • 支持索引和切片:但不能修改
  • 典型用途:固定数据记录、函数返回多个值
t = (1, 2, 3)
print(t[0]) # 1
# t[0] = 10 # 报错:tuple不支持修改

集合 (set)#

  • 无序:元素没有固定顺序
  • 可变:可以添加、删除元素
  • 不允许重复:自动去重
  • 不支持索引和切片:只能通过值来判断是否存在
  • 典型用途:去重、集合运算(交集、并集、差集)
s = {1, 2, 3, 2, 1}
print(s) # {1, 2, 3} 自动去重
s.add(4) # {1, 2, 3, 4}

字典 (dict)#

  • 有序(Python 3.7+):按插入顺序排列
  • 可变:可以增删改键值对
  • Key不允许重复:相同的Key会覆盖
  • 不支持索引和切片:通过Key访问Value
  • 典型用途:键值对数据、JSON数据处理
d = {"name": "Alice", "age": 25}
print(d["name"]) # Alice
d["city"] = "Beijing" # 添加新键值对

如何选择数据容器?#

需求场景推荐容器
存储文本数据字符串 (str)
需要频繁增删改的有序数据列表 (list)
固定不变的数据记录元组 (tuple)
需要自动去重的数据集合 (set)
需要通过键快速查找值字典 (dict)

总结口诀#

  • 字符串:文本处理用它
  • 列表:能变能重复,有序可索引
  • 元组:固定不变,安全可靠
  • 集合:去重专家,无序独特
  • 字典:键值配对,查找飞快

综合练习:教务管理系统#

这个案例综合运用了字典、列表、循环、条件语句等知识点,是一个很好的复习练习。

案例需求#

开发一个教务管理系统,可以维护和管理学员的成绩信息:

  1. 添加学生信息:录入学生姓名、语文、数学、英语成绩
  2. 修改学生信息:根据姓名修改成绩
  3. 删除学生信息:根据姓名删除学生
  4. 查询学生信息:根据姓名查询成绩
  5. 列出所有学生:遍历所有学生信息
  6. 统计班级成绩:最高分、最低分、平均分
  7. 退出系统

分步引导#

第一步:显示菜单

  • print 打印菜单
  • 提示:可以用多行字符串 """ """

第二步:用字典存储学生信息

  • 创建空字典 student_scores = {}
  • 格式:{姓名: {"chinese": 语文, "math": 数学, "english": 英语}}

第三步:用 while 循环实现主循环

  • while True 创建无限循环
  • 每次循环显示菜单,获取用户输入
  • match...case 匹配用户选择

第四步:实现添加学生功能

  • 获取学生姓名:input("请输入学生姓名: ")
  • 检查学生是否已存在:if student_name in student_scores:
  • 如果不存在,获取各科成绩并保存

第五步:实现修改学生功能

  • 检查学生是否存在:if student_name not in student_scores:
  • 如果不存在,用 continue 跳过
  • 如果存在,获取新成绩并更新

第六步:实现删除学生功能

  • 检查学生是否存在
  • 如果存在,用 del 删除:del student_scores[student_name]

第七步:实现查询学生功能

  • 检查学生是否存在
  • 如果存在,用 f-string 打印学生信息

第八步:实现列出所有学生功能

  • 用 for 循环遍历字典:for name, scores in student_scores.items():
  • 打印每个学生的信息

第九步:实现统计班级成绩功能

  • 创建空列表收集各科成绩
  • max()min()sum()len() 计算统计值
  • 打印统计结果

第十步:实现退出系统功能

  • 打印 “Bye ~”
  • break 跳出循环

涉及知识点#

知识点在代码中的应用
字典存储学生信息 student_scores
列表收集各科成绩 chinese_scores
while 循环持续显示菜单
for 循环遍历学生信息
if 判断检查学生是否存在
match…case匹配用户选择
内置函数max()min()sum()len()
字符串格式化f-string 输出信息
in 运算符判断学生是否存在
del 语句删除学生信息

参考答案#

# 菜单显示
menu = """
========== 【教务管理系统】 ==========
1. 添加学生信息 2. 修改学生信息
3. 删除学生信息 4. 查询学生信息
5. 列出所有学生 6. 统计班级成绩
7. 退出系统
====================================
"""
print("欢迎使用教务管理系统 ~")
# 用字典存储所有学生信息
student_scores = {}
while True:
# 显示菜单
print(menu)
# 获取用户选择
choice = input("请选择要执行的操作(1-7): ")
match choice:
case "1": # 添加学生信息
student_name = input("请输入学生姓名: ")
# 检查学生是否已存在
if student_name in student_scores:
print("该学生已存在, 请重新选择 ~")
else:
chinese_score = float(input("请输入语文成绩: "))
math_score = float(input("请输入数学成绩: "))
english_score = float(input("请输入英语成绩: "))
student_scores[student_name] = {
"chinese": chinese_score,
"math": math_score,
"english": english_score
}
print("学生信息添加完毕 ~")
case "2": # 修改学生信息
student_name = input("请输入要修改的学生姓名: ")
# 检查学生是否存在
if student_name not in student_scores:
print("该学生不存在, 请重新选择 ~")
continue
chinese_score = float(input("请输入语文成绩: "))
math_score = float(input("请输入数学成绩: "))
english_score = float(input("请输入英语成绩: "))
student_scores[student_name] = {
"chinese": chinese_score,
"math": math_score,
"english": english_score
}
print("学生信息修改完毕 ~")
case "3": # 删除学生信息
student_name = input("请输入要删除的学生姓名: ")
# 检查学生是否存在
if student_name not in student_scores:
print("该学生不存在, 请重新选择 ~")
else:
del student_scores[student_name]
print("学生信息删除完毕 ~")
case "4": # 查询学生信息
student_name = input("请输入要查询的学生姓名: ")
# 检查学生是否存在
if student_name not in student_scores:
print("该学生不存在, 请重新选择 ~")
else:
info = student_scores[student_name]
print(f"学生姓名: {student_name}")
print(f"语文成绩: {info['chinese']}")
print(f"数学成绩: {info['math']}")
print(f"英语成绩: {info['english']}")
case "5": # 列出所有学生
if not student_scores:
print("系统中暂无学生信息 ~")
else:
print("===== 所有学生信息 =====")
for name, scores in student_scores.items():
print(f"{name}: 语文{scores['chinese']}, 数学{scores['math']}, 英语{scores['english']}")
print("========================")
case "6": # 统计班级成绩
if not student_scores:
print("系统中暂无学生信息,请先添加学生 ~")
continue
# 收集所有成绩
chinese_scores = []
math_scores = []
english_scores = []
for scores in student_scores.values():
chinese_scores.append(scores['chinese'])
math_scores.append(scores['math'])
english_scores.append(scores['english'])
# 计算统计值
print("===== 班级成绩统计 =====")
print(f"语文 - 最高分: {max(chinese_scores)}, 最低分: {min(chinese_scores)}, 平均分: {sum(chinese_scores)/len(chinese_scores):.2f}")
print(f"数学 - 最高分: {max(math_scores)}, 最低分: {min(math_scores)}, 平均分: {sum(math_scores)/len(math_scores):.2f}")
print(f"英语 - 最高分: {max(english_scores)}, 最低分: {min(english_scores)}, 平均分: {sum(english_scores)/len(english_scores):.2f}")
print("========================")
case "7": # 退出系统
print("Bye ~")
break
case _: # 其他情况
print("非法操作, 不支持!!!")

评论区

[ 标签 ]
# AI37# AI 编程2# AI工具1# Ajax2# Apifox1# AstrBot3# Astro2# CC Switch1# CDN2# Claude Code1# claudecode2# ClaudeCode1# Cloudflare2# CloudFlare2# CloudFlare-ImgBed3# coc3# CSS6# DeepSeek6# deepseek2# DELETE1# Docker1# EdgeOne3# Gist1# git1# GitHub1# hexo-circle-of-friends1# HTML6# HTTP5# ImageManager1# Java23# java13# JavaScript5# JDBC3# JSON2# JUnit1# LangChain25# Logback1# Maven6# Muse Spark1# Mybatis1# MyBatis4# MySQL28# MySql1# NapCat1# Node.js1# obsidian2# Obsidian5# OpenCode4# ORM1# PathVariable1# PicGo1# PyCharm1# Python65# RequestBody1# RequestMapping1# RESTful风格1# skills1# Slf4j1# SpringBoot11# SQL2# Streamlit5# Svelte2# TailwindCSS1# Telegram3# Tlias2# Vercel1# vscode2# Vue7# Waline3# WebDAV1# Web基础6# Web开发6# WinSCP1# YAML1# 三层架构1# 中二宣言1# 书籍1# 使用文档10# 写作1# 函数2# 刷步数1# 前端32# 动态1# 动漫1# 包1# 单词2# 博客7# 博客工作流1# 博客开发2# 参数接收1# 友链1# 反思2# 图床6# 地图1# 备份2# 大模型1# 奇思妙想1# 存储1# 学习方法6# 学校1# 宝塔面板3# 宝宝10# 对象1# 导航栏1# 工具2# 开发1# 开发工具1# 开发规范1# 开心1# 异常处理1# 影视2# 微信1# 性能优化2# 总结1# 想法15# 感受1# 感悟11# 指南1# 提示词工程1# 插件5# 故障排除1# 效率工具2# 教程10# 数据分析9# 数据库27# 数据结构1# 文件操作2# 斩神1# 日常92# 日志框架1# 朋友圈1# 朱元璋1# 模块1# 模板1# 正则表达式2# 测试1# 游戏2# 爬虫7# 生活迁移1# 电影2# 电脑1# 碎碎念1# 视觉识别1# 类1# 类型注解1# 网络基础2# 网络教室1# 羊毛2# 脚本2# 脚本工具1# 自动化2# 蓝奏云1# 订阅推荐2# 记录2# 评论系统1# 词根1# 词缀1# 说说1# 足迹1# 跑步2# 路径参数1# 转载2# 运动1# 部落冲突1# 配置1# 随机图1# 面向对象5# 音乐3# 音标1# 饮食1# 驼峰命名1# 高德地图1
[ 公告 ]

如果你喜欢,那么欢迎来到我的世界!

了解更多
[ 音乐 ]
封面

音乐

暂未播放

0:000:00
暂无歌词
找不到相关结果。
[ contents ]
[ 全部文章 ]