PY / LAB 基础实验 02
A SMALL MACHINE FOR BIG IDEAS

列表是一排编号料槽。
生成式是一条带闸门的分拣线。

选一个预设示例,看拾取滑台按索引访问料槽、过滤旗标判断 if、
结果落进新列表;右侧矩阵托盘演示嵌套列表 m[i][j]。

FIG. 02 / LIST SORTERPython 列表分拣台
LIST·LABPy 3.10.21012345678012345678012012
← → 切换示例 · 空格重播正在校准
高亮 = 正在访问的元素

前排是原列表 nums(每个槽前方上一行是正索引,下一行是负索引),后排是新列表。滑台上的竖旗升起表示 if 条件通过,落下表示被过滤。右侧托盘:左侧滑块选行 i,前方滑块选列 j。

当前步骤准备

滑台会按访问顺序逐个移动。

空闲时自动浏览示例
FIELD NOTES

把规则带走

01 / 列表

有序、可变、按位置取

列表用 [] 创建,元素可以是任意类型。索引从 0 开始,-1 是最后一个。索引越界会抛出 IndexError,切片越界则自动截断。

切片 a[start:stop:step] 总是返回新列表。append、insert、remove、sort 原地修改并返回 None;pop 返回被删除的元素;sorted() 返回新列表。

02 / 生成式

一行写完的 for 循环

[表达式 for 变量 in 可迭代对象 if 条件] 等价于先建空列表,再循环、判断、append。末尾的 if 负责过滤;写在前面的 a if 条件 else b 是条件表达式,不过滤。

多个 for 的顺序与嵌套循环的书写顺序一致。Python 3 中,生成式的循环变量不会泄漏到外面。逻辑复杂时,普通循环往往更好读。

03 / 嵌套列表

列表里装着列表

m[i] 取出第 i 行(也是一个列表),m[i][j] 再取这一行的第 j 个。展开、转置都可以用嵌套的生成式完成。

创建二维列表时用 [[0] * 3 for _ in range(3)]。[[0] * 3] * 3 会让三行指向同一个内层列表,改一处,三行一起变。