学习目标
- 用列表组织多个值。
- 追加、读取和修改列表元素。
- 使用元组表达固定的一组值并进行解包。
概念解释
列表用方括号创建,多个元素用逗号分隔,保留顺序。tasks[0] 读取第一个元素,append 在末尾追加一个元素,tasks[0] = … 修改已有位置。列表是可变对象,修改会改变同一对象的内容。
元组通常用圆括号表示,不能重新赋值其中的元素。它适合表达固定组合,例如一个二维坐标。单元素元组必须有逗号,如 (3,),否则 (3) 只是括号包围的整数。元组可以包含可变对象,因此“元组本身不变”不代表内部所有对象都不可变,本节先使用数字组成的简单元组。
赋值 other = tasks 不复制列表,两个名字引用同一个列表。需要一层独立副本时可使用 tasks.copy();嵌套列表还要考虑更深层的共享。不要把所有修改问题都理解为变量赋值,先判断对象是否可变。
完整代码示例
将下面代码完整复制到运行器,先运行原例,再一次只修改一个地方。
tasks = ["读概念", "运行示例"]
tasks.append("完成练习")
tasks[0] = "复述概念"
print(tasks)
print(len(tasks))
print(tasks[1])
point = (3, 4)
x, y = point
print(x + y)
逐行代码讲解
- 第 1 行创建两个字符串组成的列表。
- 第 2 行追加第三项,列表长度变为 3。
- 第 3 行修改位置 0 的文字。
- 第 4 行显示整个列表,包括字符串引号与方括号。
- 第 5 行显示元素个数 3,不是所有文字的总长度。
- 第 6 行读取第二个元素,因为索引从 0 开始。
- 第 7 行创建两个数字组成的元组。
- 第 8 行解包:x 取 3,y 取 4,变量个数必须匹配。
- 第 9 行相加并输出 7。
实际运行结果
以下输出已在 Python 3 中执行核对。代码和输出分别放在不同区域;不要把输出当作代码。
['复述概念', '运行示例', '完成练习']
3
运行示例
7
常见错误
- tasks[3] 访问三元素列表会越界,最后一个有效索引是 2。
- 把 append 返回值赋回 tasks:append 原地修改,返回 None,不要覆盖列表。
- 试图给 point[0] 赋值会报 TypeError,因为元组不可修改。
实践练习
创建 [60, 80] 的成绩列表,复制一份,在副本后添加 100。确认原列表没有变化;再用 for 遍历副本打印每项成绩。
先独立作答再查看参考。能运行还不够,请解释结果为什么正确。
参考答案
scores = [60, 80]
copy_scores = scores.copy()
copy_scores.append(100)
for score in copy_scores:
print(score)
assert scores == [60, 80]
assert copy_scores == [60, 80, 100]
输出 60、80、100。两个断言检查是否真的创建了独立的一层副本。
换个角度理解
像一排有编号的座位,编号从 0 开始。a 和 b 可以是同一排座位的两个名字;往这排加一个座位,两边看到的都会改变。
需要按顺序处理一组数据时,用列表比为每个数据建立单独名字更清晰。明确“修改原对象”和“创建新对象”的区别,可避免共享数据产生意外。
动手观察:一步一步执行
这是当前知识点的独立教学示例,不是本课所有 Python 语法的模拟。修改参数、预测结果,再按下一步验证。完整语言练习使用可信代码运行器。
把每一步,看明白
变量与作用域
输出
每步显示该语句求值后的快照;第 0 步尚未执行。条件行显示判断结果,函数调用单独显示进入与返回。自动播放可随时暂停,默认不会启动。
自己判断,才知道哪里没懂
先选答案再核对。答错会提供原因和补学方向,不影响课程完成进度。
尚未提交练习。知识掌握度和学习进度分别记录。
这一节,你理解到哪里了?
这是你的自我反馈,与练习估计、课程进度分别记录。