当前位置: 首页 > news >正文

python——元组、列表、字典的综合利用实践

《元组、列表、字典综合利用实验》2025年11月6日

一、常见功能及用法

关于元组、列表、字典的详细讲解,包含功能、语法及三者对比表:

1.元组(Tuple)

定义:有序、不可修改的元素集合,元素可重复,支持多种数据类型。基本语法:用小括号 () 包裹,元素间用逗号分隔,如 t = (1, "a", True)

功能语法示例说明常见使用场景
创建元组t = (1, 2, 3)空元组:t = ();单元素需加逗号:t = (5,)存储固定不变的数据(如配置信息)
访问元素t[0]通过索引访问(从 0 开始)获取固定位置的信息
切片(获取子元组)t[1:3]获取索引 1 到 2 的元素(左闭右开)提取部分数据
拼接元组t1 + t2生成新元组(原元组不变)合并固定数据
重复元素t * 2元素重复 2 次(原元组不变)快速生成重复数据
计算长度len(t)返回元素个数判断数据量大小
检查元素是否存在x in t存在返回True,否则False验证数据是否包含目标值

2.列表(List)

定义:有序、可修改的元素集合,元素可重复,支持多种数据类型。基本语法:用中括号 [] 包裹,元素间用逗号分隔,如 l = [1, "a", True]

功能语法示例说明常见使用场景
创建列表l = [1, 2, 3]空列表:l = []存储动态变化的数据(如学生列表)
访问元素l[0]通过索引访问(从 0 开始)获取指定位置元素
修改元素l[0] = 10直接通过索引赋值修改更新数据
切片(获取子列表)l[1:3]获取索引 1 到 2 的元素(左闭右开)提取部分数据
添加元素(末尾)l.append(4)在列表末尾添加新元素动态增加数据(如新增学生)
插入元素(指定位置)l.insert(1, 5)在索引 1 处插入元素 5在指定位置添加数据
删除元素(指定值)l.remove(2)删除第一个匹配的值 2移除特定数据
删除元素(指定索引)del l[0]删除索引 0 处的元素按位置移除数据
弹出元素(最后一个)l.pop()移除并返回最后一个元素栈 / 队列操作
清空列表l.clear()移除所有元素(列表变为空)重置列表数据
反转列表l.reverse()原地反转元素顺序倒序排列数据
排序l.sort()原地升序排序(默认);reverse=True降序对数据排序
计算长度len(l)返回元素个数判断数据量大小
检查元素是否存在x in l存在返回True,否则False验证数据是否包含目标值

3.字典(Dictionary)

定义:无序(Python 3.7+ 有序)、键值对形式的集合,键唯一且不可变,值可修改。基本语法:用大括号 {} 包裹,键值对用 key: value 表示,如 d = {"name": "A", "age": 18}

功能语法示例说明常见使用场景
创建字典d = {"name": "A", "ID": "1"}空字典:d = {}dict() 构造:d = dict(name="A")存储关联数据(如学生信息)
访问值d["name"]d.get("name")[] 访问不存在的键会报错;get() 返回None(或指定默认值)获取键对应的 value
修改值d["score"] = 90键存在则修改值,不存在则新增键值对更新数据(如修改学生成绩)
删除键值对del d["ID"]删除指定键对应的键值对移除数据
清空字典d.clear()移除所有键值对(字典变为空)重置字典数据
获取所有键d.keys()返回键的列表(可迭代)遍历所有键
获取所有值d.values()返回值的列表(可迭代)遍历所有值
获取所有键值对d.items()返回 (key, value) 元组的列表同时遍历键和值
计算长度len(d)返回键值对的数量判断数据量大小
检查键是否存在key in d存在返回True,否则False验证是否包含目标键

4.元组、列表、字典三者对比表

特性元组(Tuple)列表(List)字典(Dictionary)
符号()[]{}
元素形式单个值(如 1, "a"单个值(如 1, "a"键值对(key: value
可修改性不可修改(元素 / 长度固定)可修改(增删改元素)可修改(增删改键值对)
有序性有序(索引访问)有序(索引访问)Python 3.7+ 有序(按插入顺序)
索引方式数字索引(t[0]数字索引(l[0]键索引(d["key"]
重复元素允许重复元素允许重复元素键不可重复(值可重复)
内存占用较小(不可变,存储更紧凑)较大(需预留修改空间)较大(需存储键值对关联关系)
常用场景存储固定数据(如班级信息、坐标)存储动态数据(如学生列表、日志)存储关联数据(如用户信息、配置)
核心优势安全性高(防止误修改)、速度快灵活性高(支持动态操作)查询效率高(通过键快速访问值)

总结

  • 元组适合存储 “只读” 数据,保证数据安全性;
  • 列表适合存储 “动态变化” 的序列数据,支持灵活增删改;
  • 字典适合存储 “键值关联” 的数据,通过键快速查询值,是处理结构化信息的首选。

二、实验要求

学生信息管理与成绩分析

任务要求:

  1. 定义一个包含若干学生信息的列表,每个学生信息字段包括 姓名学号成绩

  2. 记录班级基本信息(班级名、课程名、教师名)。

  3. 编写函数:

    • show_students(data):输出所有学生信息;
    • get_average_score(data):计算平均成绩。
  4. 实现学生信息的添加、修改与删除操作。

  5. 输出成绩最高和最低的学生信息。

三、设计思路及代码

1.初始信息表创建

对于学生信息采用列表[{字典}]的形式写入,为后续操作做准备

使用元组记录班级基本信息

2.具体功能实现

展示列表功能:

使用for循环,逐行打印列表中的每一个字典信息,为保持美观采用字符串格式化输出

  • 格式化输出:print(f"name:{i['name']:<6}")f-string 结合对齐符(<6 左对齐占 6 位)美化输出。

计算平均值功能:

使用for循环加值类型转换int()获取数值、len()函数获取长度,在利用sum()函数进行求和,最终实现平均值转化

查询信息功能:

利用for循环进行遍历的同时获取索引值(利用enumerate()内置函数简化过程),然后进行匹配输出

  • enumerate() 是一个内置函数,主要用于将一个可迭代对象(如列表、元组、字符串等)转换为一个枚举对象,同时返回元素的索引(位置)和元素值本身
  • enumerate() 的基本作用当你需要遍历一个可迭代对象(比如列表 student)时,不仅想获取每个元素的值,还想知道该元素在对象中的位置(索引)enumerate() 就能简化这个过程。

添加信息功能:

利用字符串分割.split()简化输入过程以及.append增填元素

  • 字符串分割:info.split() 将输入的学生信息按空格分割为列表,便于提取 nameIDscore

删除信息功能:

遵循先查询后删除的机制,调用find函数进行匹配,然后利用del 删除元素

更新信息功能:

先匹配后更改

查找最高功能:

提取原列表所有成绩元素、创建新的元组,利用for循环进行比较的同时,对最大值进行索引保存。

查找最低功能:

同上

交互菜单设计:

Menu() 函数通过 while 循环实现菜单持续显示,用户输入数字选择功能。

if-elif 匹配用户选择,调用对应的功能函数,实现交互逻辑。

逻辑串联:

依赖关系:修改 / 删除功能依赖于查找功能(先查后改 / 删)。

反馈机制:每个操作后输出结果(如 “添加成功”“新学生列表”),增强用户体验。

四、代码中用到的知识总结

1. 数据结构

  • 列表(List):用于存储学生信息(student 列表),支持动态添加、删除、修改元素(如 student.append()del student[i])。
  • 字典(Dictionary):每个学生信息用字典表示(如 {"name": "A", "ID": "1", "score": "32"}),通过键(name/ID/score)快速访问值。
  • 元组(Tuple):用于存储班级信息(class_info),元组不可修改,适合存储固定信息。

2. 函数定义与调用

  • 自定义函数:如 show_student()get_average_score() 等,将功能模块化,提高代码复用性。
  • 函数参数与返回值:例如 find_student(student) 接收学生列表,返回找到的学生索引(index)或 -1(未找到)。

3. 流程控制

  • 循环:
    • for 循环:遍历学生列表(for i in student)、遍历索引(for index, i in enumerate(student))。
    • while 循环:菜单交互(while chose != 9),实现程序持续运行直到用户选择退出。
  • 条件判断if-elif-else 结构处理菜单选择(如 if chose == 1)、查找学生时的匹配判断(if i['ID'] == pivot)。

4. 字符串操作

  • 格式化输出:print(f"name:{i['name']:<6}")f-string 结合对齐符(<6 左对齐占 6 位)美化输出。
  • 字符串分割:info.split() 将输入的学生信息按空格分割为列表,便于提取 nameIDscore

5. 输入输出

  • input():获取用户输入(如查找学生的 ID、新增学生信息等)。
  • print():输出信息(学生列表、提示语、计算结果等)。

6. 数值计算

  • 类型转换:int(i['score']) 将字符串类型的成绩转为整数,用于计算平均分、最高分、最低分。
  • 求和与除法:sum(int(i['score']) for i in student) 计算总分,除以学生数量得到平均分。

五、最终代码

#学生列表(元组(字典))
student = [{"name": "A", "ID": "1", "score": "32"},{"name": "B", "ID": "2", "score": "42"},{"name": "C", "ID": "3", "score": "64"},{"name": "D", "ID": "4", "score": "54"}
]
#班级信息(元组)
class_info = ("Class1","math","Mr.Z")
#编写函数:
#    * `show_students(data)`:输出所有学生信息;循环打印学生信息
def show_student(student,class_info):print(f"-----The student's info of {class_info}-----")for i in student:print(f"-           name:{i['name']:<6} ID:{i['ID']:<5} score:{i['score']:<3}               -")print("-"*58)print("")
#    * `get_average_score(data)`:计算平均成绩。统计学生成绩调用v函数
def get_average_score(student):average_score= sum(int(i['score']) for i in student) / len(student)print(f'The average:{average_score}\n')
# 实现学生信息的添加、修改与删除操作。 先查找后修改
def find_student(student):pivot = input("Enter you want to find the student's ID:")for index, i in enumerate(student): #此处的index充当计数器、索引的功能,i是用于查找匹配的if i['ID'] == pivot:print(f"----> name: {i['name']} ID: {i['ID']} score: {i['score']}\n")return indexprint("Student not found")return -1 	#为后续调用准备
def add_student(student):info = input("Please enter the student's name,id and score (separated by spaces):")name, id, score = info.split()# 构造字典并添加到列表student.append({"name": name, "ID": id, "score": score})print(f"Student:{name} has been successfully added ")print("\nThe new student's info:")show_student(student, class_info)
def change_student(student):print("Please search for the student before change")i = int(find_student(student))if i == -1:print("End")else:newscore = input("Please enter the new score of the student you want to change :")student[i]["score"] = newscoreprint("The student's score has been successfully changed")print("\nThe new student's info:")show_student(student, class_info)
def delete_student(student):print("Please search for the student before deletion")i = int(find_student(student))if i == -1:print("End")else:del student[i]print("the student has ben successfully deleted")print("\nThe new student's info:")show_student(student,class_info)
# 输出成绩最高和最低的学生信息。   查找
def max_score(student):
# 创建一个空列表,然后把他们一次加入进去,然后开始比较,遇到大的了就存当前的索引值allscore =[]maxscore = 0index = -1 #索引值for i in student:allscore.append(int(i['score']))for m in range(len(allscore)):if allscore[m] > maxscore:maxscore = allscore[m]index = mprint(f"The maxscore is:  {maxscore}")print(student[index])
def min_score(student):
# 创建一个空列表,然后把他们一次加入进去,然后开始比较,遇到大的了就存当前的索引值allscore =[]minscore = 100index = -1 #索引值for i in student:allscore.append(int(i['score']))for m in range(len(allscore)):if allscore[m] < minscore:minscore = allscore[m]index = mprint(f"The minscore is:  {minscore}")print(student[index])
def Menu():# print("-------Student Info System Menu-------\n"#       "1. Show Student Information\n"#       "2. Add Student Information\n"#       "3. Search Student Information\n"#       "4. Delete Student Information\n"#       "5. Update Student Score\n"#       "6. Show Highest Score Student\n"#       "7. Show Lowest Score Student\n"#       "8. Get Average Score\n"#       "9. Exit System\n"#       "---------------------------------------\n")chose = 0while chose != 9:print("-------Student Info System Menu-------\n""1. Show Student Information\n""2. Add Student Information\n""3. Search Student Information\n""4. Delete Student Information\n""5. Update Student Score\n""6. Show Highest Score Student\n""7. Show Lowest Score Student\n""8. Get Average Score\n""9. Exit System\n""---------------------------------------\n")chose = int(input("Please Choose the Service You Need--->"))if chose == 1:print("Show Student Information\n")show_student(student,class_info)elif chose == 2:print("Add Student Information\n")add_student(student)elif chose == 3:print("Search Student Information\n")find_student(student)elif chose == 4:print("Delete Student Information\n")delete_student(student)elif chose == 5:print("Update Student Score\n")change_student(student)elif chose == 6:print("Show Highest Score Student\n")max_score(student)elif chose == 7:print("Show Lowest Score Student\n")min_score(student)elif chose == 8:print("Get Average Score\n")get_average_score(student)elif chose == 9:print("Exit System\n")else:print("No Such Option in the Menu\n")
Menu()

六、编写过程中遇到的问题

编写查询功能时

最开始的逻辑为

def find_student(student):pivot = input("Enter you want to find the student's ID:")for i in (student):if i['ID'] == pivot:print(f"----> name: {i['name']} ID: {i['ID']} score: {i['score']}\n")return i-1else:print("Student not found")return -1

此时出现了一个逻辑错误:

在每一次循环的工程中我都会有返回值,导致我后续编写其他功能进行调用时候出现了和预想输出值不一的结果。

后续进行了逻辑调整:

i在列表student中循环遍历字典:

​ 当i列表键'ID'pivot等价时:

​ 输出当前字典

​ 返回当前i-1的值

​ 否则:

​ 输出未找到

​ 返回为-1

修改为

i在列表student中循环遍历字典,同时进行索引记数:

​ 当i列表键'ID'pivot等价时:

​ 输出当前字典

​ 返回当前index索引的值

返回为-1

输出未找到

http://www.dtcms.com/a/579445.html

相关文章:

  • wordpress 导航站厦门网站建设满山红
  • 表白网站制作模板制作一个交易平台网站
  • 板子 --11.6
  • discuz网站备份黔东南网站建设
  • 山西太原建站怎么做湖南沙坪建设集团有限公司网站
  • 襄阳网站建设公司怎样在手机上运行wordpress
  • 专业制作网站公司华强北附近网站建设
  • ctfshow-web入门-361-372-ssti
  • 网站建设与维护 东博wordpress sns插件
  • Linux LVM DR 模式部署实践
  • 西宁网站开发什么是网站建设与管理
  • 品牌加盟最好的网站建设扶贫网站建设的意义
  • 网站建设意思app维护费用一般多少钱
  • 自己用dw做网站能加声音吗没有网站如何做cpa推广
  • Nginx 的多个场景配置
  • 做网站要具备些什么条件steam怎么注册域名
  • Orangepi Zero2—全志H616开发
  • 荣成住房和城乡建设部网站在线教育网站设计
  • 成都网站网络建设广州网站推广找哪家
  • 那个网站有免费模板wordpress 聊天插件
  • 自建网站 支付宝做网站需求 后期方便优化
  • 做婚纱摄影网站做seo要投入什么
  • C++:类和对象---初级篇
  • 建立公司网站视频域名网查询
  • Linux(3)—— 权限操作
  • 网站系统建站1688创业商机网
  • 实时网站制作wordpress文件管理
  • STM32 采集差分编码器数据的方法
  • 预约网站制作网站空间数据丢失
  • 做网站即墨中国城乡住房和城乡建设部网站