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 程序。

要求:

  1. 创建一个包含 3 首你最爱歌曲的列表 playlist
  2. 朋友推荐了一首新歌,请把它加到列表末尾。
  3. 把你最不喜欢的一首歌(假设是第 1 首)删掉。
  4. 打印出现在的歌单长度 len()
  5. 挑战题: 把歌单按字母顺序排序 .sort()

6. 总结与资源 (10 min)

📚 核心知识点回顾

  • 列表是容器,什么都能装。
  • 索引从 0 开始,切片顾头不顾尾。
  • 列表是可变的(Mutable),修改它不会生成新列表。

🔗 课后探索资源

  • Python Tutor: 强烈推荐!把代码放进去,可以看到列表在内存里长什么样。
  • 预习: 下节课我们将学习如何用 for 循环一个个处理列表里的元素(遍历)。