开始之前
如果只记录一个分数,score = 82 已经足够;但记录一组分数时,score_1、score_2、score_3 会让读取、修改和重复处理越来越困难。列表让一组有顺序的相关值成为一个整体。
本课先学习如何创建、读取和修改列表,再把 M4 的 for 与 Accumulator 用到真实的一组数据上。每一步都沿用已经掌握的变量、赋值、print() 和循环。
概念 01
List 把一组有顺序的值保存在一个变量中
一组分数、实验读数或样本编号属于同一件事时,列表比许多分散变量更容易阅读和处理。
List 的英文全称是 List,中文叫列表,Python 写法使用方括号 []。例如 scores = [82, 91, 76] 会先创建一个包含三个值的 list,再把整个列表保存到变量 scores。列表本身是一个值,所以它能像数字或字符串一样被变量保存和传递给 print()。
Element 的英文全称是 Element,中文叫元素,表示列表中的一个值。在 [82, 91, 76] 中,82、91 和 76 各是一个 element。Element 可以是数字或字符串;本课先使用同一种数据组成清楚的列表,实际用途包括保存多次测量、多个名称或连续记录。
方括号里的逗号负责分隔 element。创建列表时要问:这些数据是否属于同一组,而且顺序是否有意义?如果答案是肯定的,list 往往比一串带编号的变量更合适。
Empty list 的英文全称是 Empty list,中文叫空列表,Python 写成 []。例如 scores = [] 表示一个当前没有 element 的 list;print(len(scores)) 会输出 0。空列表仍然是 list,实际可用于先准备一个容器,或表示当前没有记录。
- List:有顺序的一组值
- Python 使用 [] 创建列表
- Empty list:当前没有元素但仍然是 list
- Element:列表中的一个值
- 整个列表可以保存在变量中
把三个分数保存为一个列表
scores 保存的是一个 list;三个数字是其中三个 element。print(scores) 会显示整个列表。
点击“运行”后,程序输出会显示在这里。
概念 02
Index 定位元素,len() 告诉你列表有多长
知道一个元素的位置和列表的长度,才能可靠地读取第一项、最后一项或检查可用位置。
Index 的英文全称是 Index,中文叫索引,表示元素在列表中的位置编号。Python 的 index 从 0 开始,而不是从 1 开始:Index: 0 | 1 | 2;Value: 82 | 91 | 76。因此 scores[0] 是 82,scores[2] 是 76。索引实际用于读取或修改一个明确位置的元素。
Length function 的英文全称是 Length function,Python 写成 len(...),中文可以理解为“长度函数”。len(scores) 中,len 是 Python 已经提供的 Function,scores 是放进括号里的 Argument;它产生列表包含的 element 数量 3。实际用途是知道数据有多少项,并帮助判断哪些 index 可用。
长度为 3 的列表拥有 index 0、1、2,但没有 index 3。需要读取最后一个元素时,Python 也支持 index -1;scores[-1] 表示从末尾数第一项。先把 0 开始的规则理解清楚,再把 -1 当作清楚的末尾写法。
- Index 从 0 开始
- scores[0] 是第一项
- scores[-1] 是最后一项
- len(scores) 产生元素数量
- 长度 3 的有效非负索引是 0、1、2
读取第一项、最后一项和列表长度
[0] 读取第一项,[-1] 读取最后一项,len(scores) 产生列表中的元素数量。
点击“运行”后,程序输出会显示在这里。
概念 03
Mutable list 可以修改,也可以在末尾追加元素
真实记录会被更正或增加;列表允许程序更新已有位置,并继续加入新数据。
Mutable 的英文全称是 Mutable,中文叫可变的。List 是 mutable,表示创建之后仍能改变内容。例如 scores[1] = 95 会把 index 1 原来的 91 替换成 95,但变量 scores 仍然保存同一个列表。这适合更正测量值或更新某个位置。
append method 的英文全称是 append method,Python 写成 list_variable.append(value),中文可以理解为“在列表末尾追加元素的方法”。例如 scores.append(88) 会把 88 作为新 element 放到末尾。它的实际用途是按发生顺序继续收集记录。
这里的点号表示“使用 scores 这个列表提供的 append 功能”,所以写 scores.append(88),而不是 append(scores)。本课只需要把它理解成列表专用的操作;还不会展开 method 背后的更多机制。
- List 是 Mutable
- 使用 scores[index] = value 修改位置
- append() 在末尾加入一个元素
- 写成 scores.append(value)
- 修改与追加都会改变列表内容
更正第二个分数并追加新分数
index 1 是第二项,因此 91 被改为 95;append() 再把 88 放到列表末尾。
点击“运行”后,程序输出会显示在这里。
概念 04
直接遍历元素,并用 IndexError 找到越界位置
列表的价值不只在保存数据,还在于能用同一段循环逐项处理;越界时错误信息会指出需要检查的位置。
List iteration 的英文全称是 List iteration,中文叫列表遍历。Python 写成 for score in scores:,每轮把下一个 element 保存到 loop variable score。这里不需要 range(),因为任务关心元素值本身,而不是位置编号。实际用途是逐项输出、检查或累加整组数据。
把 M4 的 Accumulator 与列表结合:total = 0 后,每轮执行 total = total + score。追踪表中的 Iteration(循环轮次)表示第几次重复:Iteration | score | total before | total after;1 | 82 | 0 | 82;2 | 91 | 82 | 173;3 | 76 | 173 | 249。这样能看见 total 如何保存前面所有轮次的结果。
IndexError 的英文全称是 Index Error,Python 错误类型写成 IndexError,中文叫索引越界错误。scores = [82, 91, 76] 后读取 scores[3] 会显示类似 IndexError: list index out of range,因为长度是 3,可用非负 index 只有 0、1、2。它的实际用途是提醒你检查错误行中的 index 与 len(scores)。
调试 IndexError 时先看错误最后一行和行号,再打印 len(scores) 与准备使用的 index。不要机械地把 index 减 1:真正的问题可能是循环边界、空列表,或选错了位置。先确认你想读取哪一项,再决定正确修复。
- for score in scores 直接得到元素
- 需要位置时才考虑 index 或 range
- Accumulator 可以汇总整组值
- IndexError 表示索引位置不存在
- 对照 index 与 len() 查错
遍历列表并累加所有分数
每轮 score 得到一个 element,total 保存更新后的累计结果;循环结束后才输出最终总和。
点击“运行”后,程序输出会显示在这里。
常见错误
这些写法为什么不工作
错误不是失败,而是 Python 告诉你“这部分我无法理解”。先找到差异,再一次只改一个问题。
把长度误当成最后一个索引
len(scores) 是元素数量 3,但最后一个非负 index 是 2。先对照 0 开始的位置,或使用 [-1] 明确读取最后一项。
scores = [82, 91, 76] print(scores[len(scores)])
scores = [82, 91, 76] print(scores[-1])
忘记 append() 属于哪个列表
append 是列表提供的 method,需要通过点号说明操作哪个列表。scores.append(88) 会改变 scores。
scores = [82, 91, 76] append(88)
scores = [82, 91, 76] scores.append(88)
引导修改
更正温度、追加读数并逐项输出
这不是正式练习。跟着步骤修改已有代码,观察每次改变如何影响程序。
- 1先运行代码,确认 temperatures 目前有三个 element。
- 2使用 index 把第二个温度从 20.1 修改为 20.4。
- 3使用 append() 在列表末尾加入 19.0。
- 4使用 for temperature in temperatures: 直接遍历,并在循环中逐项输出 temperature。
完成后:列表变成 [19.8, 20.4, 19.6, 19.0],然后依次输出四个温度值。
修改这段代码
先运行,再按左侧步骤逐项修改。你的草稿会保存在这个浏览器中。
点击“运行”后,程序输出会显示在这里。
正式练习
现在独立完成 2 道练习
先运行代码观察问题,再点击“检查答案”。检查只关心题目要求的结果,不要求你照抄参考写法。
正式练习
建立并检查样本编号列表
创建名为 samples 的列表,依次保存四个字符串 A1、B2、C3、D4。必须使用索引从 samples 读取并输出 First sample: A1 和 Last sample: D4;再使用 len(samples) 输出 Count: 4。不要直接写死三个输出结果。
点击“运行”后,程序输出会显示在这里。
需要一点提示?
先自己尝试一次;卡住时再逐级打开提示。
本课总结
本课小结
- 1List 使用 [] 保存一组有顺序的 element;整个列表是一个值。
- 2Index 从 0 开始,len() 产生元素数量;IndexError 时对照位置与长度。
- 3List 是 Mutable,可以用索引修改,并通过 list.append(value) 在末尾追加。
- 4for element in list 可以直接遍历元素,并与 Counter 或 Accumulator 结合。