05. 列表收纳师
你现在的衣橱里,如果把所有袜子塞进一个抽屉、T恤堆在一起,找起来是不是很崩溃?变量就像只有一个格子的小盒子——它只能放一件东西。当你需要管理"一堆数据"时,你需要的是 列表(list)。
列表是 Python 最常用的数据结构。它就像一个超大收纳箱,什么都能往里放,还给你每个物品编号。
📦 Python 魔法学院
你的魔法背包越来越鼓了——咒语卷轴、魔法药水、稀有矿石……单个变量盒子已经装不下了。
今天你将学会「收纳术」——列表(list)。这是一个无限容量的魔法宝箱,每个物品都有编号,你可以随时添加、取出、排序。管理一百件宝物,和一件一样轻松。
💡 生活中的列表无处不在¶
在你打开 Python 之前,其实你已经天天在用"列表"了:
| 生活中的列表 | 元素 |
|---|---|
| 🎒 书包里的物品 | 课本、铅笔盒、水壶、零食 |
| 🎮 Minecraft 背包 | 钻石剑×1、面包×64、橡木×32 |
| 📱 好友排行榜 | 小明(1500分)、小红(1420分)、小刚(1380分) |
| 🍔 午餐菜单 | 汉堡、薯条、可乐、冰淇淋 |
想象一下,如果 Minecraft 背包一次只能装一件物品——你刚挖到钻石就得扔掉面包,那还怎么玩?变量就是"一次一件"的小盒子,而列表就是"随便装"的大背包。今天我们就来打造这个神奇背包!
🛒 为什么需要列表?——从购物清单说起¶
想象一下:周六上午,妈妈让你去买菜。她给你一张纸条:
买:鸡蛋、西红柿、青椒、土豆、牛奶、面包
你把纸条塞进口袋,到了超市一个一个对照着买,回来的时候不会漏掉任何一样。这张纸条,就是"列表"!
如果妈妈不用纸条,而是一样一样发微信告诉你——“买鸡蛋”、“买西红柿”、“买青椒”……等你到了超市,早忘了第三样是什么了。
编程也一样。当你需要管理"一堆东西"时,把它们一个个放在单独的变量里 item1、item2、item3……不仅打字累,而且找起来像翻散落一地的纸片。列表让你把所有这些装进一个有编号的容器,一秒找到任何一个。
5.1 创建你的第一个列表¶
🧠 计算机怎么"看"列表? 当 Python 读到
scores = [95, 88, 72, 91, 84]时,它就像老师拿着一叠考卷走进教室——先把所有卷子按学号排好,谁要查成绩,直接翻到对应学号就行。这就是为什么列表要"编号"——让你一秒找到任何一个元素。
5.2 访问列表元素:索引¶
列表里每个元素有编号,从 0 开始:
列表: ["红色", "蓝色", "绿色", "黄色"]
索引: 0 1 2 3🎯 为什么要从 0 开始? 想象你站在一栋楼前,一楼就是"第 0 层"——你一抬脚就已经在第 0 层了。计算机也一样,“第 0 个"的意思是"从开头偏移 0 步”,这样计算地址最快。几乎所有编程语言都是这样设计的!
💡 从 0 开始计数是编程领域的传统。记住:第 1 个的索引是 0,第 n 个的索引是 n-1。
⚠️ 💡 常见误区:索引用错了!
初学者最常犯的错误就是把第几个当成索引:
你以为 实际 第 1 个 → 索引 1 ❌ 第 1 个 → 索引 0 第 3 个 → 索引 3 ❌ 第 3 个 → 索引 2 记忆技巧:编号从 0 开始,就像你在教学楼一楼——你本来就站在"地面层"(第 0 层),往上一层才是"第 1 层"。计算机里,“第 0 个"的意思是"从起点偏移 0 步”。
Python14 准备加载编辑器...🔧 正在准备编程环境...0%●等待编辑器...○等待 Python 环境...如果你想要"最后一个",直接用
fruits[-1],省去数数的烦恼!
5.3 切片:取一段连续的元素¶
列表[起点:终点] 让你像切蛋糕一样取出列表的一部分:
🍰 切片图解:用眼睛看懂"从哪里切"
列表: [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 索引: 0 1 2 3 4 5 6 7 8 9 ↑ ↑ numbers[0:3] 起点(吃) 终点(不吃!) 结果 → [0, 1, 2] ↑ 到索引 3 就停! numbers[-3:] → 从倒数第3个吃到结尾: 索引 -3 -2 -1 元素 7 8 9 结果 → [7, 8, 9] numbers[::2] → 每走2步吃一口: 索引 0 1 2 3 4 5 6 7 8 9 步数 吃 跳 吃 跳 吃 跳 吃 跳 吃 跳 结果 → [0, 2, 4, 6, 8]把它想象成切西瓜🍉:
[起点:终点]的意思是——从起点位置下刀,一直切到终点位置前面。终点的这一块不拿走!
🍰 切片口诀:记住
[start:stop:step]——“起点吃,终点不吃,一步一口”。[0:3]咬到索引 0、1、2,到 3 就停了(就像吃蛋糕,切 3 刀得到 3 块)。
5.4 增删改查:列表四大操作¶
增 — 加东西¶
⚠️ 💡 常见误区:
append()和extend()傻傻分不清?这两个方法都往列表里"加东西",但行为完全不同:
方法 效果 类比 append(x)把 x 整体当成一个元素放入 往书包里塞一个文具盒(文具盒里面有笔,但书包只认为它是一样东西) extend([x, y])把列表里的每个元素逐个加入 把文具盒打开,把所有笔一把抓放进书包 Python14 准备加载编辑器...🔧 正在准备编程环境...0%●等待编辑器...○等待 Python 环境...一句话口诀:
append是"整包放入",extend是"拆开倒入"。想加多个元素用extend,想加一个整体用append!
删 — 去东西¶
改 — 修改元素¶
查 — 查找和统计¶
⚡ 为什么这很重要? 如果你是班长,老师让你统计全班 45 人的考试成绩——一个个翻卷子累不累?用列表一行
sorted(scores)就排好了。编程的本质,就是把"重复劳动"交给机器。
5.5 列表遍历:配合循环更强大¶
💡 列表推导式是 Python 的招牌语法:
[表达式 for 变量 in 列表 if 条件],一行搞定筛选+转换。
🧠 跟着计算机走一遍:用
discounted = [price * 0.8 for price in prices]举例——
计算机先看
prices里第一个数:12把 12 放进
price,算12 * 0.8 = 9.6,放到新列表下一个:
35→35 * 0.8 = 28.0,追加到新列表一直重复……直到 prices 里所有数字都处理完
最终
discounted=[9.6, 28.0, 6.4, ...]你只写了一行,计算机帮你做了 6 次乘法。这就是"偷懒的艺术"!
5.6 实战:成绩分析器¶
综合运用所学,写一个简单的成绩分析工具:
看!几十行 Excel 操作才能完成的事,Python 十几行就搞定了。这就是编程的力量。
🎓 长大了用在哪? 考试成绩分析只是开始。未来如果你做个游戏主播,你用列表管理粉丝排名;如果你开奶茶店,你用列表追踪每种口味的销量;如果你做天气预报,你用列表存一周的气温数据。列表,是你数据世界的第一个"数据库"。
5.7 🎮 趣味挑战:课堂点名器¶
用列表做一个随机点名+抽奖系统:
💡 试试看:把
classmates列表改成你朋友的名字。每次运行抽奖结果都不一样!
5.8 动手练习¶
📋 参考答案(点击展开)
5.9 本章小结¶
| 你学到了什么 | 具体内容 |
|---|---|
| ✅ 创建列表 | [元素1, 元素2, ...] |
| ✅ 索引访问 | 从 0 开始,负数从末尾数 |
| ✅ 切片 | [起点:终点:步长] |
| ✅ 增 | append() insert() extend() |
| ✅ 删 | remove() pop() del |
| ✅ 改 | 直接赋值 列表[索引] = 新值 |
| ✅ 查 | count() index() len() max() min() sum() |
| ✅ 列表推导式 | [表达式 for 变量 in 列表 if 条件] |
🚀 下一章预告:你写了很多厉害的代码,但每次都重新敲一遍好麻烦。下一章,我们学习函数——把常用代码打包成"工具箱",一劳永逸!
5.10 📚 参考资料¶
| 资源 | 链接 | 说明 |
|---|---|---|
| Python 官方教程 — 列表 | docs | 官方列表/字典/元组/集合等数据结构详解 |
| Real Python — 列表与元组 | realpython | 列表和元组的深入对比和最佳实践 |
| Python 列表推导式完全指南 | realpython | 从入门到高级的列表推导式教程 |
本章内容基于 Python 官方教程 改编,遵循 PSF License 许可。