5.2 列表及其应用
课程信息 - 课程名称:Python基础及应用 - 教学平台:Anaconda Jupyter Notebook —
📚 学习目标
完成本小节学习后,你将能够:
1.理解列表的概念和特点,区分列表与元组的异同
2.掌握列表的各种定义方式,包括一维列表和多维列表
3.熟练运用列表的索引、切片访问元素
4.掌握列表的运算符、内置函数和处理方法
5.理解列表的可变性及其在实际编程中的应用
6.能够编写涉及列表处理的实际应用程序

5.2.1 列表概述
一、列表的概念
1. 什么是列表?
列表(List) 是Python中最常用、最灵活的组合数据类型之一。它是一个有序、可变的序列,可以存储任意类型的元素。
💡 类比理解:想象一个重庆火锅的菜品清单——你可以随时添加菜品、去掉不吃的、调整顺序,而且清单上可以有各种不同类型的菜品(荤菜、素菜、主食、饮料等)。
2. 列表与元组的核心区别
特性 | 列表(List) | 元组(Tuple) |
符号表示 | 方括号 [] | 圆括号 () |
可变性 | 可变(可以修改) | 不可变(不能修改) |
适用场景 | 数据需要频繁修改时 | 数据固定不变时 |
性能 | 相对较慢 | 相对较快 |
# 回顾:元组是不可变的ck_student_tuple = ("张三", 20, "数字经济")# ck_student_tuple[0] = "李四"# ❌ 会报错!元组不能修改# 列表是可变的ck_student_list = ["张三", 20, "数字经济"]ck_student_list[0] ="李四"# ✅ 可以修改print(ck_student_list)# 输出: ['李四', 20, '数字经济']
🔗 知识串联:回想第5.1节学习的元组,元组就像一份已经盖了章的合同,不能更改;而列表就像一份草稿,可以随时涂改、增删。

二、列表的定义
1. 基本定义方式
列表使用方括号 [] 定义,元素之间用逗号 , 分隔。
# 方式1:直接定义chongqing_districts = ["渝中区", "江北区", "南岸区", "九龙坡区", "沙坪坝区"]# 方式2:使用list()函数转换string_to_list =list("CK大学")# 将字符串转为列表print(string_to_list)# 输出: ['C', 'K', '大', '学']# 方式3:从其他可迭代对象转换tuple_to_list =list((1, 2, 3))# 元组转列表print(tuple_to_list)# 输出: [1, 2, 3]
2. 定义空列表
# 两种定义空列表的方式empty_list1 = []empty_list2 =list()print(type(empty_list1))# 输出:print(len(empty_list1))# 输出: 0
3. 定义包含不同类型元素的列表
# 列表可以包含任意类型的元素,甚至可以混合类型ck_student_info = ["王小红",# 字符串 - 姓名19,# 整数 - 年龄3.85,# 浮点数 - GPATrue,# 布尔值 - 是否班干部["Python", "数据分析"],# 列表 - 选修课程("重庆", "万州")# 元组 - 籍贯]print(ck_student_info)
💡 重要提示:虽然Python允许列表包含不同类型的元素,但在实际编程中,通常建议一个列表存储相同类型的数据,这样更便于后续处理。

三、一维列表
1. 什么是一维列表?
一维列表是最基本的列表形式,元素按线性顺序排列,就像一排座位。
# 重庆轨道交通1号线站点(部分)line1_stations = ["小什字", "较场口", "七星岗", "两路口", "鹅岭", "大坪", "石油路", "歇台子"]# CK大学数字经济专业本学期课程ck_digital_economy_courses = ["Python基础及应用", "微观经济学", "高等数学", "大学英语", "数据结构与算法"]# 重庆特色美食chongqing_foods = ["火锅", "小面", "酸辣粉", "毛血旺", "辣子鸡", "串串香"]
2. 获取列表长度
使用 len() 函数获取列表中元素的个数。
chongqing_foods = ["火锅", "小面", "酸辣粉", "毛血旺", "辣子鸡", "串串香"]print(f"重庆特色美食数量: {len(chongqing_foods)}")# 输出: 重庆特色美食数量: 6
🔗 知识串联:len() 函数在第2章学习字符串时就已经接触过,它可以用于获取字符串、列表、元组等多种序列类型的长度。

四、多维列表
1. 什么是多维列表?
多维列表是列表的嵌套,即列表中的元素也是列表。最常见的是二维列表,可以看作是一个表格或矩阵。
💡 类比理解:一维列表像是一条街道上的门牌号;二维列表像是一个教室的座位表,需要行号和列号才能确定位置。
2. 二维列表的定义
# CK大学数字经济专业3个班级,每个班级5名学生的成绩# 行:班级,列:学生ck_class_scores = [[85, 92, 78, 88, 95],# 1班5名学生成绩[90, 87, 93, 81, 89],# 2班5名学生成绩[78, 85, 91, 87, 82]# 3班5名学生成绩]print(f"班级数量: {len(ck_class_scores)}")# 输出: 班级数量: 3print(f"每班学生数: {len(ck_class_scores[0])}")# 输出: 每班学生数: 5
3. 不规则二维列表
Python的二维列表不要求每行元素个数相同:
# 重庆各区县特色景点(数量不等)chongqing_attractions = [["洪崖洞", "解放碑", "长江索道"],# 渝中区 3个["磁器口", "歌乐山"],# 沙坪坝区 2个["南山一棵树", "南滨路", "南山植物园", "黄桷垭老街"],# 南岸区 4个["观音桥"]# 江北区 1个]print(f"渝中区景点: {chongqing_attractions[0]}")print(f"江北区景点数量: {len(chongqing_attractions[3])}")
4. 三维列表及更高维度
# 三维列表示例:CK大学3个年级,每个年级2个班,每班4名学生成绩ck_scores_3d = [[# 大一[85, 92, 78, 88],# 1班[90, 87, 93, 81]# 2班],[# 大二[78, 85, 91, 87],[88, 92, 79, 95]],[# 大三[91, 84, 88, 90],[82, 89, 93, 86]]]# 访问:大三2班第3名学生的成绩print(ck_scores_3d[2][1][2])# 输出: 93
⚠️ 注意事项:虽然Python支持任意维度的列表,但维度越高,代码可读性越差。实际编程中,三维以上的列表应谨慎使用,可以考虑使用其他数据结构(如字典或类)。

🎯 本节小结
知识点 | 核心内容 |
列表概念 | 有序、可变的序列,用 [] 定义 |
与元组区别 | 列表可变,元组不可变 |
定义方式 | 直接定义、list() 转换 |
一维列表 | 线性排列的单一列表 |
多维列表 | 列表的嵌套,常见二维列表 |

🤖 AI辅助学习:与AI一起探索列表
练习目标:通过与AI对话,用列表创建有趣的图案
练习1:用列表打印重庆城市轮廓
给AI的提示词:
请用Python列表和print语句,创建一个简单的ASCII艺术图案,图案内容是"CK"两个字母,要求:1. 使用列表存储每一行的字符串2. 使用循环遍历列表打印3. 添加适当的装饰边框
示例参考代码(可以先自己尝试,再与AI对比):
# CK ASCII艺术ck_art = ["CCCCCKK", " CKK", " CK K", " CKK", " CK K", " CKK", "CCCCCKK"]for line in ck_art:print(line)
练习2:创建动态爱心图案
给AI的提示词:
请用Python列表存储一个爱心形状的ASCII图案,要求:1. 使用列表的每个元素存储一行图案2. 爱心图案要对称美观3. 在爱心中间加上"I ❤️ CQ"字样4. 使用循环打印整个图案
练习3:用二维列表创建简单棋盘
给AI的提示词:
请用Python的二维列表创建一个8x8的国际象棋棋盘图案,要求:1. 使用二维列表存储棋盘状态2. 用"■"和"□"表示黑白格子3. 使用嵌套循环打印棋盘4. 棋盘四周添加坐标标记(1-8和a-h)

5.2.2 列表处理
一、列表中元素的序号(索引)
1. 正向索引
列表中的每个元素都有一个索引(序号),从 0 开始计数。
# CK大学数字经济专业2024级学生名单ck_students_2024 = ["陈小明", "李婷婷", "王强", "张美丽", "刘洋", "赵静"]# 正向索引示意# 元素:陈小明李婷婷王强张美丽刘洋赵静# 索引:012345
2. 反向索引
Python支持负数索引,从列表末尾开始计数,-1 表示最后一个元素。
# 反向索引示意# 元素:陈小明李婷婷王强张美丽刘洋赵静# 正索引:012345# 负索引:-6-5-4-3-2-1
ck_students_2024 = ["陈小明", "李婷婷", "王强", "张美丽", "刘洋", "赵静"]print(f"第一个学生: {ck_students_2024[0]}")# 陈小明print(f"最后一个学生: {ck_students_2024[-1]}")# 赵静print(f"倒数第二个学生: {ck_students_2024[-2]}") # 刘洋
🔗 知识串联:索引的概念在第2章学习字符串时已经接触过。字符串和列表都是序列类型,它们的索引机制完全相同!
3. 索引越界错误
ck_students = ["陈小明", "李婷婷", "王强"]# print(ck_students[5])# ❌ IndexError: list index out of range# print(ck_students[-4]) # ❌ IndexError: list index out of range
💡 安全访问技巧:在访问列表元素前,可以先检查索引是否有效:
index =5if0<= index <len(ck_students):print(ck_students[index])else:print("索引超出范围")

二、访问列表中的元素
1. 基本访问方式
# 重庆各区2023年GDP(亿元)cq_gdp_2023 = [("渝北区", 2442.35),("九龙坡区", 1868.44),("渝中区", 1560.48),("江北区", 1624.66),("涪陵区", 1503.37)]# 访问第3个区(索引为2)district, gdp = cq_gdp_2023[2]print(f"{district}的GDP为{gdp}亿元")# 输出: 渝中区的GDP为1560.48亿元
2. 访问嵌套列表(多维列表)
# CK大学三个班级的学生名单ck_classes = [["张三", "李四", "王五"],# 1班["赵六", "孙七", "周八", "吴九"],# 2班["郑十", "钱十一"]# 3班]# 访问2班的第3名学生(注意索引从0开始)student = ck_classes[1][2]# 第2个列表的第3个元素print(f"2班第3名学生: {student}")# 输出: 2班第3名学生: 周八# 访问3班的第1名学生print(f"3班第1名学生: {ck_classes[2][0]}")# 输出: 3班第1名学生: 郑十
3. 遍历访问所有元素
方式1:使用for循环直接遍历
chongqing_hotpot_ingredients = ["毛肚", "鸭肠", "黄喉", "嫩牛肉", "虾滑", "豆皮", "土豆", "藕片"]print("重庆火锅必点菜品:")for ingredient in chongqing_hotpot_ingredients:print(f"- {ingredient}")
方式2:使用索引遍历
chongqing_hotpot_ingredients = ["毛肚", "鸭肠", "黄喉", "嫩牛肉", "虾滑", "豆皮", "土豆", "藕片"]print("重庆火锅必点菜品(带编号):")for i inrange(len(chongqing_hotpot_ingredients)):print(f"{i+1}. {chongqing_hotpot_ingredients[i]}")
方式3:使用enumerate()获取索引和值
chongqing_hotpot_ingredients = ["毛肚", "鸭肠", "黄喉", "嫩牛肉", "虾滑", "豆皮", "土豆", "藕片"]print("重庆火锅必点菜品:")for index, ingredient inenumerate(chongqing_hotpot_ingredients, start=1):print(f"{index}. {ingredient}")
🔗 知识串联:enumerate() 函数在第4章循环程序设计中学习过,它可以在遍历的同时获取元素的索引,非常实用!

三、列表切片
1. 切片的基本语法
切片用于获取列表的子集,语法为:list[start:end:step]
参数 | 说明 | 默认值 |
start | 起始索引(包含) | 0 |
end | 结束索引(不包含) | 列表长度 |
step | 步长 | 1 |
# CK大学一周课程安排ck_weekly_schedule = ["Python基础",# 周一"微观经济学",# 周二"高等数学",# 周三"大学英语",# 周四"数据结构",# 周五"体育",# 周六"班会"# 周日]# 获取工作日课程(周一到周五,索引0-4)workday_courses = ck_weekly_schedule[0:5]# 或简写 [0:5]print(f"工作日课程: {workday_courses}")# 输出: 工作日课程: ['Python基础', '微观经济学', '高等数学', '大学英语', '数据结构']# 获取周末安排(周六到周日,索引5-6)weekend_courses = ck_weekly_schedule[5:7]print(f"周末安排: {weekend_courses}")# 输出: 周末安排: ['体育', '班会']
2. 切片的省略写法
ck_weekly_schedule = ["Python基础", "微观经济学", "高等数学", "大学英语", "数据结构", "体育", "班会"]# 省略start,从开头开始print(ck_weekly_schedule[:3])# ['Python基础', '微观经济学', '高等数学']# 省略end,到末尾结束print(ck_weekly_schedule[5:])# ['体育', '班会']# 同时省略start和end,复制整个列表print(ck_weekly_schedule[:])# 完整复制# 使用负数索引print(ck_weekly_schedule[-2:])# 最后两个: ['体育', '班会']print(ck_weekly_schedule[:-2])# 除最后两个外的所有
3. 带步长的切片
# 重庆轨道交通线路编号chongqing_metro_lines = [1, 2, 3, 4, 5, 6, 9, 10, 18, "环线"]# 每隔一个取一个(步长为2)print(chongqing_metro_lines[::2])# [1, 3, 5, 9, 18]# 反转列表(步长为-1)print(chongqing_metro_lines[::-1])# ['环线', 18, 10, 9, 6, 5, 4, 3, 2, 1]# 从索引2到7,步长为2print(chongqing_metro_lines[2:8:2])# [3, 5, 9]
🔗 知识串联:切片操作与第2章学习的字符串切片完全一致!字符串和列表都是序列类型,所以它们共享相同的切片语法。
4. 切片与索引的区别
ck_list = ["重庆", "CK大学", "数字经济", "专业"]# 索引返回单个元素print(ck_list[1])# CK大学(字符串)print(type(ck_list[1]))## 切片返回列表(即使只有一个元素)print(ck_list[1:2])# ['CK大学'](列表)print(type(ck_list[1:2]))#

四、列表的运算符和表达式
1. 连接运算符 +
# 重庆主城九区(部分)main_districts = ["渝中", "江北", "南岸", "九龙坡", "沙坪坝"]other_districts = ["大渡口", "北碚", "渝北", "巴南"]# 合并两个列表all_districts = main_districts + other_districtsprint(f"重庆主城九区: {all_districts}")
2. 重复运算符 *
# 创建包含重复元素的列表separator = ["-"] *30print("".join(separator))# ------------------------------# 初始化一个长度为5,值都为0的列表zeros = [0] *5print(zeros)# [0, 0, 0, 0, 0]# 初始化学生成绩列表(假设有10名学生,初始成绩为0)ck_student_scores = [0] *10print(f"初始成绩列表: {ck_student_scores}")
⚠️ 重要陷阱:使用 * 复制包含可变对象的列表时要小心!
# ❌ 错误示范:这样创建的每个子列表是同一个对象wrong_matrix = [[0] *3] *3wrong_matrix[0][0] =1print(wrong_matrix)# [[1, 0, 0], [1, 0, 0], [1, 0, 0]] - 所有行都被修改了!# ✅ 正确做法:使用列表推导式correct_matrix = [[0] *3for _ inrange(3)]'''列表推导式:[表达式 for 变量 in 可迭代对象]执行逻辑:依次从 可迭代对象 中取出每个元素,赋给 变量;对每个 变量 计算 表达式 的值;将所有计算结果收集到一个新列表中。列如:squares = [x**2 for x in range(5)]# [0, 1, 4, 9, 16]'''correct_matrix[0][0] =1print(correct_matrix)# [[1, 0, 0], [0, 0, 0], [0, 0, 0]] - 只有第一行被修改
3. 成员运算符 in 和 not in
chongqing_foods = ["火锅", "小面", "酸辣粉", "毛血旺", "辣子鸡"]# 检查元素是否在列表中print("火锅"in chongqing_foods)# Trueprint("烤鸭"in chongqing_foods)# Falseprint("烤鸭"notin chongqing_foods)# True# 实际应用:检查学生是否选了某门课ck_student_courses = ["Python", "经济学", "数学"]if"Python"in ck_student_courses:print("该学生选修了Python课程")
🔗 知识串联:in 和 not in 运算符在第3章分支程序设计中学习条件判断时已经使用过,同样适用于字符串、列表、元组等序列类型。
4. 比较运算符
# 列表比较按元素逐个比较list1 = [1, 2, 3]list2 = [1, 2, 4]list3 = [1, 2, 3]print(list1 == list3)# True - 所有元素相同print(list1 == list2)# False - 第3个元素不同print(list1 < list2)# True - 前两个相同,3 < 4

五、列表处理函数
Python提供了许多内置函数用于处理列表:
1. 常用内置函数
# CK大学某班学生Python成绩ck_python_scores = [85, 92, 78, 95, 88, 76, 90, 82, 91, 87]# len() - 获取元素个数print(f"学生人数: {len(ck_python_scores)}")# max() - 获取最大值print(f"最高分: {max(ck_python_scores)}")# min() - 获取最小值print(f"最低分: {min(ck_python_scores)}")# sum() - 求和(仅适用于数值列表)print(f"总分: {sum(ck_python_scores)}")# sorted() - 排序(返回新列表,原列表不变)sorted_scores =sorted(ck_python_scores)print(f"成绩排序: {sorted_scores}")print(f"原列表: {ck_python_scores}")# 原列表保持不变# reversed() - 反转(返回迭代器)reversed_scores =list(reversed(ck_python_scores))print(f"反转列表: {reversed_scores}")
2. sorted() 函数的进阶用法
# 重庆各区GDP数据(区名,GDP)cq_gdp = [("渝北区", 2442.35),("九龙坡区", 1868.44),("渝中区", 1560.48),("江北区", 1624.66),("涪陵区", 1503.37)]# 按GDP排序(默认按元组第一个元素排序)sorted_by_name =sorted(cq_gdp)print("按名称排序:", sorted_by_name)
3. zip() 函数 - 并行迭代
# CK大学学生姓名和成绩ck_names = ["张三", "李四", "王五", "赵六"]ck_scores = [85, 92, 78, 95]# 使用zip()将两个列表组合for name, score inzip(ck_names, ck_scores):print(f"{name}: {score}分")# 输出:# 张三: 85分# 李四: 92分# 王五: 78分# 赵六: 95分

六、列表处理方法
列表对象提供了丰富的方法,这些方法直接修改原列表(可变性的体现):
1. 添加元素的方法
# 重庆美食清单chongqing_foods = ["火锅", "小面"]# append() - 在末尾添加单个元素chongqing_foods.append("酸辣粉")print(chongqing_foods)# ['火锅', '小面', '酸辣粉']# extend() - 在末尾添加多个元素(合并列表)chongqing_foods.extend(["毛血旺", "辣子鸡"])print(chongqing_foods)# ['火锅', '小面', '酸辣粉', '毛血旺', '辣子鸡']# insert() - 在指定位置插入元素chongqing_foods.insert(1, "串串香")# 在索引1处插入print(chongqing_foods)# ['火锅', '串串香', '小面', '酸辣粉', '毛血旺', '辣子鸡']
2. 删除元素的方法
ck_courses = ["Python", "经济学", "数学", "英语", "体育", "英语"]# remove() - 删除第一个匹配的指定值ck_courses.remove("英语")# 删除第一个"英语"print(ck_courses)# ['Python', '经济学', '数学', '体育', '英语']# pop() - 删除指定索引的元素(默认最后一个),并返回该元素last_course = ck_courses.pop()print(f"被删除的课程: {last_course}")# 英语print(ck_courses)# ['Python', '经济学', '数学', '体育']# pop() 指定索引second_course = ck_courses.pop(1)print(f"被删除的课程: {second_course}")# 经济学# clear() - 清空列表ck_courses.clear()print(ck_courses)# []
3. 查找和计数方法
ck_grades = [85, 92, 78, 92, 88, 92, 76]# index() - 查找元素第一次出现的索引print(ck_grades.index(92))# 1# index() 指定搜索范围print(ck_grades.index(92, 2))# 从索引2开始搜索,返回3# count() - 统计元素出现次数print(f"92分出现了{ck_grades.count(92)}次")
4. 排序和反转方法
ck_scores = [85, 92, 78, 95, 88, 76]# sort() - 原地排序(修改原列表)ck_scores.sort()print(f"升序排序: {ck_scores}")# [76, 78, 85, 88, 92, 95]# sort() 降序排序ck_scores.sort(reverse=True)print(f"降序排序: {ck_scores}")# [95, 92, 88, 85, 78, 76]# reverse() - 原地反转ck_scores.reverse()print(f"反转后: {ck_scores}")# [76, 78, 85, 88, 92, 95]
💡 重要区别:sort() 和 sorted() 的区别 - sort():列表方法,原地排序,修改原列表,返回 None - sorted():内置函数,返回新列表,原列表不变
5. 复制方法
original_list = ["重庆", "CK", "大学"]# copy() - 创建列表的浅拷贝copied_list = original_list.copy()# 修改副本不影响原列表copied_list[1] ="CQ"print(f"原列表: {original_list}")# ['重庆', 'CK', '大学']print(f"副本: {copied_list}")# ['重庆', 'CQ', '大学']
6. 方法速查表
方法 | 功能 | 返回值 |
append(x) | 末尾添加元素x | None |
extend(iter) | 末尾添加可迭代对象的所有元素 | None |
insert(i, x) | 在索引i处插入元素x | None |
remove(x) | 删除第一个值为x的元素 | None |
pop([i]) | 删除并返回索引i的元素(默认最后) | 被删除的元素 |
clear() | 清空列表 | None |
index(x[, start[, end]]) | 查找x第一次出现的索引 | 索引值 |
count(x) | 统计x出现次数 | 次数 |
sort(key=None, reverse=False) | 原地排序 | None |
reverse() | 原地反转 | None |
copy() | 返回列表的浅拷贝 | 新列表 |

七、列表的可变性
1. 可变性的含义
可变性(Mutability) 是指对象创建后是否可以被修改。列表是可变的,这意味着:
·可以修改列表中的元素
·可以添加或删除元素
·列表在内存中的地址不变
# 演示列表的可变性ck_list = ["Python", "经济学", "数学"]print(f"初始列表: {ck_list}")print(f"内存地址: {id(ck_list)}")# 修改元素ck_list[1] ="微观经济学"print(f"\n修改后: {ck_list}")print(f"内存地址: {id(ck_list)}")# 地址不变!# 添加元素ck_list.append("英语")print(f"\n添加后: {ck_list}")print(f"内存地址: {id(ck_list)}")# 地址仍然不变!
2. 可变性的影响:别名现象
# 创建列表ck_courses = ["Python", "经济学", "数学"]# 创建别名(不是复制!)ck_courses_alias = ck_courses# 通过别名修改ck_courses_alias[0] ="Java"print(f"原列表: {ck_courses}")# ['Java', '经济学', '数学']print(f"别名列表: {ck_courses_alias}")# ['Java', '经济学', '数学']print(f"是同一个对象: {ck_courses is ck_courses_alias}")# True
3. 正确复制列表的方法
original = ["重庆", "火锅", "小面"]# 方法1:使用切片copy1 = original[:]# 方法2:使用list()函数copy2 =list(original)# 方法3:使用copy()方法copy3 = original.copy()# 验证:修改副本不影响原列表copy1[0] ="成都"print(f"原列表: {original}")# ['重庆', '火锅', '小面']print(f"副本1: {copy1}")# ['成都', '火锅', '小面']
4. 深拷贝与浅拷贝
import copy# 包含嵌套列表的列表ck_matrix = [["张三", 85], ["李四", 92], ["王五", 78]]# 浅拷贝:只复制最外层shallow_copy = ck_matrix.copy()shallow_copy[0][1] =95# 修改内层列表print(f"原列表: {ck_matrix}")# [['张三', 95], ['李四', 92], ['王五', 78]] - 也被修改了!# 深拷贝:递归复制所有层级deep_copy = copy.deepcopy(ck_matrix)deep_copy[1][1] =100print(f"原列表: {ck_matrix}")# [['张三', 95], ['李四', 92], ['王五', 78]] - 未被修改print(f"深拷贝: {deep_copy}")# [['张三', 95], ['李四', 100], ['王五', 78]]
🔗 知识串联:is 运算符在第3章学习关系运算时介绍过,用于判断两个变量是否指向同一个对象。这里用它来判断是否是别名关系。

🎯 本节小结
知识点 | 核心内容 |
索引 | 正向从0开始,负向从-1开始 |
访问元素 | list[index],多维用多个索引 |
切片 | list[start:end:step],返回新列表 |
运算符 | +连接,*重复,in成员判断 |
内置函数 | len(), max(), min(), sum(), sorted()等 |
方法 | append(), extend(), insert(), remove(), pop(), sort()等 |
可变性 | 列表可变,注意别名和复制问题 |

🤖 AI辅助学习:列表操作实战
练习目标:通过与AI对话,掌握列表的各种操作技巧
练习1:创建成绩分析系统
给AI的提示词:
请帮我用Python列表创建一个学生成绩分析系统,要求:1. 创建一个包含20个随机成绩(60-100分)的列表2. 计算并输出:最高分、最低分、平均分、及格率3. 将成绩按从高到低排序4. 统计各分数段人数(90-100优秀,80-89良好,70-79中等,60-69及格,<60不及格)5. 使用重庆CK大学作为背景
练习2:制作重庆火锅点菜系统
给AI的提示词:
请用Python列表帮我创建一个重庆火锅点菜系统,要求:1. 创建几个菜品分类列表(荤菜、素菜、主食、饮料)2. 每个分类包含5-8个具体菜品3. 实现以下功能:- 显示菜单- 添加菜品到购物车- 从购物车删除菜品- 查看购物车- 计算总价(给每个菜品设置价格)4. 使用循环和条件判断实现交互式菜单
练习3:用列表创建文字动画
给AI的提示词:
请用Python列表和time模块创建一个简单的文字动画效果,要求:1. 使用列表存储动画的每一帧(字符串)2. 创建一个加载动画,显示"CK大学数据加载中...",后面有旋转的进度指示器(如 | / - \ 循环)3. 或者创建一个打字机效果,让文字逐个显示4. 添加适当的延迟让动画可见
练习4:生成重庆地图ASCII艺术
给AI的提示词:
请用Python列表创建一个简单的重庆地图轮廓ASCII艺术,要求:1. 使用二维列表或字符串列表表示地图2. 在地图上标记几个著名地点(如解放碑、洪崖洞、磁器口等)3. 使用不同的字符表示不同区域(如河流、山地、城区)4. 添加图例说明5. 使用循环打印整个地图

🤖 AI辅助学习:综合项目挑战
练习目标:综合运用列表知识,完成更有挑战性的项目
挑战1:创建CK大学课程表系统
给AI的提示词:
请帮我用Python列表创建一个完整的大学课程表系统,要求:1. 使用二维列表表示一周5天、每天4节课的课程表2. 每门课程包含:课程名、教室、教师3. 实现以下功能:- 显示完整课程表- 查询某天的课程- 查询某门课的时间- 计算每周课时数- 检查课程冲突4. 使用重庆CK大学作为背景5. 添加一些实际的课程数据
挑战2:制作重庆火锅食材搭配推荐器
给AI的提示词:
请用Python列表创建一个重庆火锅食材搭配推荐器,要求:1. 创建多个食材分类列表(肉类、海鲜、蔬菜、豆制品、菌菇等)2. 每个食材包含:名称、最佳涮烫时间、口感描述、推荐搭配3. 实现以下功能:- 按分类浏览食材- 根据人数推荐菜品数量- 生成购物清单- 计算预计消费- 推荐经典搭配组合4. 使用列表的各种操作方法
挑战3:设计CK大学图书馆借阅系统
给AI的提示词:
请用Python列表创建一个简单的图书馆借阅系统,要求:1. 使用列表存储图书信息(书名、作者、ISBN、是否借出、借出日期)2. 使用列表存储借阅者信息(姓名、学号、已借图书列表)3. 实现以下功能:- 图书查询(按书名、作者)- 借书操作- 还书操作- 显示借阅排行榜- 显示逾期未还图书4. 使用嵌套列表和列表方法
挑战4:用列表实现简单游戏
给AI的提示词:
请用Python列表创建一个简单的文字冒险游戏或猜数字游戏,要求:1. 使用列表存储游戏地图、道具、怪物等信息2. 使用列表记录玩家状态和背包3. 实现基本的游戏逻辑:- 移动、探索- 收集道具- 与NPC互动- 胜负判定4. 使用循环和条件判断实现游戏流程5. 可以是迷宫探索、数字猜谜、或文字RPG等类型

📖 本章总结
列表 vs 元组 对比表
特性 | 列表 List | 元组 Tuple |
定义符号 | [] | () |
可变性 | ✅ 可变 | ❌ 不可变 |
适用场景 | 数据需要修改 | 数据固定不变 |
性能 | 较慢 | 较快 |
方法数量 | 多(11+个) | 少(2个) |
典型用途 | 动态数据集合 | 配置项、记录 |
与前面章节的联系
本章知识点 | 关联的前置知识 |
列表索引、切片 | 第2章:字符串索引、切片 |
列表遍历 | 第4章:for循环、while循环 |
列表条件操作 | 第3章:if分支、关系运算 |
列表函数 | 第2章:内置函数 |
列表推导式 | 第4章:循环的进阶应用 |

📝 课后练习
基础练习
1.列表基本操作:创建一个包含重庆10个区县名称的列表,完成以下操作:
o打印列表长度
o打印第3个和第倒数第2个元素
o打印前5个元素
o将列表按字母顺序排序后打印
2.二维列表操作:创建一个3×3的二维列表表示CK大学某课程的座位表,每个座位用”空”或学生姓名表示,实现:
o显示座位表
o查询某个学生的位置
o统计出勤人数
进阶练习
3.成绩分析:给定一个班级30名学生的5门课程成绩(使用随机数生成),计算:
o每门课程的平均分、最高分和最低分
o每名学生的总分和平均分
o找出总分前5名的学生
4.列表综合应用:实现一个简单的购物车系统,支持添加商品、删除商品、修改数量、计算总价等功能。
