Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

PyFirst

05. 列表收纳师

你现在的衣橱里,如果把所有袜子塞进一个抽屉、T恤堆在一起,找起来是不是很崩溃?变量就像只有一个格子的小盒子——它只能放一件东西。当你需要管理"一堆数据"时,你需要的是 列表(list)

列表是 Python 最常用的数据结构。它就像一个超大收纳箱,什么都能往里放,还给你每个物品编号。

📦 Python 魔法学院

你的魔法背包越来越鼓了——咒语卷轴、魔法药水、稀有矿石……单个变量盒子已经装不下了。

今天你将学会「收纳术」——列表(list)。这是一个无限容量的魔法宝箱,每个物品都有编号,你可以随时添加、取出、排序。管理一百件宝物,和一件一样轻松。

💡 生活中的列表无处不在

在你打开 Python 之前,其实你已经天天在用"列表"了:

生活中的列表元素
🎒 书包里的物品课本、铅笔盒、水壶、零食
🎮 Minecraft 背包钻石剑×1、面包×64、橡木×32
📱 好友排行榜小明(1500分)、小红(1420分)、小刚(1380分)
🍔 午餐菜单汉堡、薯条、可乐、冰淇淋

想象一下,如果 Minecraft 背包一次只能装一件物品——你刚挖到钻石就得扔掉面包,那还怎么玩?变量就是"一次一件"的小盒子,而列表就是"随便装"的大背包。今天我们就来打造这个神奇背包!

🛒 为什么需要列表?——从购物清单说起

想象一下:周六上午,妈妈让你去买菜。她给你一张纸条:

买:鸡蛋、西红柿、青椒、土豆、牛奶、面包

你把纸条塞进口袋,到了超市一个一个对照着买,回来的时候不会漏掉任何一样。这张纸条,就是"列表"!

如果妈妈不用纸条,而是一样一样发微信告诉你——“买鸡蛋”、“买西红柿”、“买青椒”……等你到了超市,早忘了第三样是什么了。

编程也一样。当你需要管理"一堆东西"时,把它们一个个放在单独的变量里 item1item2item3……不仅打字累,而且找起来像翻散落一地的纸片。列表让你把所有这些装进一个有编号的容器,一秒找到任何一个。


5.1 创建你的第一个列表

Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
等待编辑器...
等待 Python 环境...

🧠 计算机怎么"看"列表? 当 Python 读到 scores = [95, 88, 72, 91, 84] 时,它就像老师拿着一叠考卷走进教室——先把所有卷子按学号排好,谁要查成绩,直接翻到对应学号就行。这就是为什么列表要"编号"——让你一秒找到任何一个元素。

Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
等待编辑器...
等待 Python 环境...

5.2 访问列表元素:索引

列表里每个元素有编号,从 0 开始:

列表:  ["红色", "蓝色", "绿色", "黄色"]
索引:     0      1      2      3

🎯 为什么要从 0 开始? 想象你站在一栋楼前,一楼就是"第 0 层"——你一抬脚就已经在第 0 层了。计算机也一样,“第 0 个"的意思是"从开头偏移 0 步”,这样计算地址最快。几乎所有编程语言都是这样设计的!

Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
等待编辑器...
等待 Python 环境...

💡 从 0 开始计数是编程领域的传统。记住:第 1 个的索引是 0,第 n 个的索引是 n-1。

⚠️ 💡 常见误区:索引用错了!

初学者最常犯的错误就是把第几个当成索引

你以为实际
第 1 个 → 索引 1❌ 第 1 个 → 索引 0
第 3 个 → 索引 3❌ 第 3 个 → 索引 2

记忆技巧:编号从 0 开始,就像你在教学楼一楼——你本来就站在"地面层"(第 0 层),往上一层才是"第 1 层"。计算机里,“第 0 个"的意思是"从起点偏移 0 步”。

Python
14
准备加载编辑器...
🔧 正在准备编程环境...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]

把它想象成切西瓜🍉:[起点:终点] 的意思是——从起点位置下刀,一直切到终点位置前面。终点的这一块不拿走!

Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
等待编辑器...
等待 Python 环境...

🍰 切片口诀:记住 [start:stop:step]——“起点吃,终点不吃,一步一口”。[0:3] 咬到索引 0、1、2,到 3 就停了(就像吃蛋糕,切 3 刀得到 3 块)。

Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
等待编辑器...
等待 Python 环境...

5.4 增删改查:列表四大操作

增 — 加东西

Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
等待编辑器...
等待 Python 环境...

⚠️ 💡 常见误区:append()extend() 傻傻分不清?

这两个方法都往列表里"加东西",但行为完全不同:

方法效果类比
append(x)x 整体当成一个元素放入往书包里塞一个文具盒(文具盒里面有笔,但书包只认为它是一样东西)
extend([x, y])把列表里的每个元素逐个加入把文具盒打开,把所有笔一把抓放进书包
Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
等待编辑器...
等待 Python 环境...

一句话口诀append 是"整包放入",extend 是"拆开倒入"。想加多个元素用 extend,想加一个整体用 append

删 — 去东西

Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
等待编辑器...
等待 Python 环境...

改 — 修改元素

Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
等待编辑器...
等待 Python 环境...

查 — 查找和统计

Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
等待编辑器...
等待 Python 环境...

为什么这很重要? 如果你是班长,老师让你统计全班 45 人的考试成绩——一个个翻卷子累不累?用列表一行 sorted(scores) 就排好了。编程的本质,就是把"重复劳动"交给机器。

Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
等待编辑器...
等待 Python 环境...

5.5 列表遍历:配合循环更强大

Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
等待编辑器...
等待 Python 环境...

💡 列表推导式是 Python 的招牌语法:[表达式 for 变量 in 列表 if 条件],一行搞定筛选+转换。

🧠 跟着计算机走一遍:用 discounted = [price * 0.8 for price in prices] 举例——

  1. 计算机先看 prices 里第一个数:12

  2. 把 12 放进 price,算 12 * 0.8 = 9.6,放到新列表

  3. 下一个:3535 * 0.8 = 28.0,追加到新列表

  4. 一直重复……直到 prices 里所有数字都处理完

  5. 最终 discounted = [9.6, 28.0, 6.4, ...]

你只写了一行,计算机帮你做了 6 次乘法。这就是"偷懒的艺术"!


5.6 实战:成绩分析器

综合运用所学,写一个简单的成绩分析工具:

Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
等待编辑器...
等待 Python 环境...

看!几十行 Excel 操作才能完成的事,Python 十几行就搞定了。这就是编程的力量。

🎓 长大了用在哪? 考试成绩分析只是开始。未来如果你做个游戏主播,你用列表管理粉丝排名;如果你开奶茶店,你用列表追踪每种口味的销量;如果你做天气预报,你用列表存一周的气温数据。列表,是你数据世界的第一个"数据库"。

5.7 🎮 趣味挑战:课堂点名器

用列表做一个随机点名+抽奖系统:

Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
等待编辑器...
等待 Python 环境...

💡 试试看:把 classmates 列表改成你朋友的名字。每次运行抽奖结果都不一样!


5.8 动手练习

Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
等待编辑器...
等待 Python 环境...
📋 参考答案(点击展开)
Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
等待编辑器...
等待 Python 环境...

5.9 本章小结

你学到了什么具体内容
✅ 创建列表[元素1, 元素2, ...]
✅ 索引访问从 0 开始,负数从末尾数
✅ 切片[起点:终点:步长]
✅ 增append() insert() extend()
✅ 删remove() pop() del
✅ 改直接赋值 列表[索引] = 新值
✅ 查count() index() len() max() min() sum()
✅ 列表推导式[表达式 for 变量 in 列表 if 条件]

🚀 下一章预告:你写了很多厉害的代码,但每次都重新敲一遍好麻烦。下一章,我们学习函数——把常用代码打包成"工具箱",一劳永逸!

5.10 📚 参考资料

资源链接说明
Python 官方教程 — 列表docs.python.org/3/tutorial/datastructures.html官方列表/字典/元组/集合等数据结构详解
Real Python — 列表与元组realpython.com/python-lists-tuples列表和元组的深入对比和最佳实践
Python 列表推导式完全指南realpython.com/list-comprehension-python从入门到高级的列表推导式教程

本章内容基于 Python 官方教程 改编,遵循 PSF License 许可。