Python 列表:数据的“瑞士军刀”
从散乱的变量到有序的队列【https://html.cafe/x403401ed】
1. 引入:笨办法 vs 聪明办法 (10 min)
😡 痛点场景:全班成绩单
如果我们想在程序里存储全班 50 个人的名字,按照目前的知识,我们得这么写:
name1 = "张三" name2 = "李四" name3 = "王五" # ... 写到手断 ... name50 = "赵六"
“同学们,想象一下,如果我要计算全班平均分,或者要把所有名字打印出来,我是不是得写 50 行 print?如果明年扩招变成 100 人怎么办?这种方法不仅笨,而且容易出错。我们需要一个‘容器’,把这些数据打包带走。”
💡 解决方案:List (列表)
生活类比:
- 散乱变量: 满地乱扔的衣服。
- 列表: 一个有格子的抽屉柜,每个格子放一件衣服。
2. 概念:列表的解剖学 (15 min)
📐 基础语法
Python 使用方括号 [] 来表示列表,元素之间用逗号 , 分隔。
# 创建一个空列表 empty_box = [] # 创建一个复仇者联盟名单 avengers = ["Iron Man", "Thor", "Hulk"] # Python 的列表很包容(异构性) chaos_list = ["Python", 3.14, 42, True]
“Python 的列表非常‘随和’。在 C 或 Java 里,数组通常只能存同一种类型的数据(比如全是整数)。但在 Python 里,列表像个大杂烩,你可以把字符串、数字、甚至另一个列表都塞进去。就像你的书包里既有书,也有笔和水杯。”
👀 可视化:火车站台模型
把列表想象成一列火车,每个车厢装一个数据。
Iron
0
Thor
1
Hulk
2
Cap
3
3. 难点:索引 (Indexing) 与切片 (Slicing) (20 min)
🔢 为什么从 0 开始?
计算机计算的是“偏移量” (Offset)。第一个元素离起点的偏移量是 0。
“这是新手的第一个坑:Off-by-one Error(差一错误)。如果你想拿第一个人,要找
avengers[0]。如果你找 avengers[1],你会得到雷神,钢铁侠会生气的。”
🤯 负数索引:Python 的黑魔法
如果我们想拿倒数第一个元素,不需要算长度,直接用 -1。
A
0
-4
B
1
-3
C
2
-2
D
3
-1
nums = ['A', 'B', 'C', 'D'] print(nums[0]) # 输出 'A' print(nums[-1]) # 输出 'D' (倒数第一) print(nums[100]) # ❌ IndexError: list index out of range
🔪 切片:切吐司面包
语法:list[start : stop : step]
口诀:顾头不顾尾(包含 Start,不包含 Stop)
# 取前两个 print(nums[0:2]) # ['A', 'B'] (不包含索引2) # 列表翻转 (面试高频题) print(nums[::-1]) # ['D', 'C', 'B', 'A']
4. 进阶:增删改查 (20 min)
➕ 增加 (Create/Add)
append(x): 加到末尾(最常用)insert(i, x): 插队extend(list): 两个列表合并
❌ 删除 (Delete)
pop(): 弹出末尾的(像取走盘子最上面的)remove(x): 删除指定值的第一个del list[i]: 按索引删除
“想象我们在排队买奶茶。
append 就是新来的人排在队尾。insert 就是有个不守规矩的人插队。pop 就是排在最后的人买完走了,或者放弃了。”
cart = ["Apple", "Banana"] # 1. 增加 cart.append("Cola") # ['Apple', 'Banana', 'Cola'] # 2. 修改 (Mutable!) cart[0] = "Green Apple" # 字符串不能这样做,但列表可以! # 3. 删除 item = cart.pop() # item 是 'Cola',cart 变回 ['Green Apple', 'Banana']
5. 课堂活动:我的 Spotify 歌单 (15 min)
🎸 任务:Code Your Playlist
情境: 你正在为周末的派对编写一个自动 DJ 程序。
要求:
- 创建一个包含 3 首你最爱歌曲的列表
playlist。 - 朋友推荐了一首新歌,请把它加到列表末尾。
- 把你最不喜欢的一首歌(假设是第 1 首)删掉。
- 打印出现在的歌单长度
len()。 - 挑战题: 把歌单按字母顺序排序
.sort()。
6. 总结与资源 (10 min)
📚 核心知识点回顾
- 列表是容器,什么都能装。
- 索引从 0 开始,切片顾头不顾尾。
- 列表是可变的(Mutable),修改它不会生成新列表。
🔗 课后探索资源
- Python Tutor: 强烈推荐!把代码放进去,可以看到列表在内存里长什么样。
- 预习: 下节课我们将学习如何用
for循环一个个处理列表里的元素(遍历)。