0%

已完成 0/14 关

教学模式

你可以随时调整。

此设置调整教师的教学方式,无需重新生成课程。

第 3 关 含代码 约 11 分钟

列表容器与初涉编程

认识复合数据类型:列表(list)

在编写程序时,我们不仅需要处理单个数字或单个字符串,更需要把多个相关的数据归拢在一个整体中进行管理——比如一系列用户名字、一段文章分词后的单词序列,或者一次测量的温度记录。在 Python 中,最基础且常用的复合数据类型就是列表(list)。

列表用方括号 [...] 标示,里面的各个元素之间用逗号 , 隔开:

>>> squares = [1, 4, 9, 16, 25]
>>> squares
[1, 4, 9, 16, 25]

列表里的元素可以是相同类型(如全都是整数),也可以混合存放不同类型(整数、浮点数、字符串等),但在实际工程中,通常同一个列表装载相同含义的数据。

列表的索引与切片

列表与字符串一样,都是 Python 内置的**序列(sequence)**类型。因此,在上一关中学到的所有索引与切片规则,在列表中完全通用:

>>> fruits = ['apple', 'banana', 'orange', 'grape']
>>> fruits[0]      # 访问 0 号位元素(第 1 个)
'apple'
>>> fruits[-1]     # 访问倒数第 1 个元素
'grape'
>>> fruits[1:3]    # 切片截取下标 1(含)到 3(不含)产生新列表
['banana', 'orange']
>>> fruits + ['pear', 'peach']  # 列表支持使用 + 进行拼接合并
['apple', 'banana', 'orange', 'grape', 'pear', 'peach']

使用内置函数 len(),可以随时获取列表中包含的元素数量:

>>> len(fruits)
4

核心区别:列表是可变(mutable)的

回顾上一关,我们试图通过 word[0] = 'J' 更改字符串中的字符时,Python 坚决报错,因为字符串是不可变的(immutable)。

然而,列表是可变(mutable)类型!这意味着列表在内存中一旦创建,其内部各个位置的元素都可以随时被替换修改。

官方教程给出了一个非常典型的例子:

>>> cubes = [1, 8, 27, 65, 125]  # 这里显然算错了一个数:4 的立方是 64,而不是 65
>>> 4 ** 3
64
>>> cubes[3] = 64  # 直接把下标 3(第 4 个位置)的值替换为正确数字
>>> cubes
[1, 8, 27, 64, 125]

只需使用 列表[索引] = 新值,就能直接实现原地替换。

动态追加元素:append() 方法

很多时候,我们无法在一开始就预知列表的全部内容,而是在程序运行计算过程中逐步往列表里塞入新数据。列表对象内置了一个极其重要的方法(method):append()。

方法是“从属于某个具体对象”的专用函数,调用语法为 对象.方法名(参数)。

append() 的作用是在列表的最末尾追加一个新元素:

>>> cubes.append(216)     # 添加 6 的立方
>>> cubes.append(7 ** 3)  # 添加 7 的立方 (343)
>>> cubes
[1, 8, 27, 64, 125, 216, 343]

请注意:append() 是在列表自身内部原地修改,它不会返回一个新列表。

列表切片赋值与嵌套

通过对切片进行赋值,甚至可以批量修改某一段区域,或者彻底清空列表:

>>> letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> letters[2:5] = ['C', 'D', 'E']  # 替换下标 2 到 4 的元素
>>> letters
['a', 'b', 'C', 'D', 'E', 'f', 'g']
>>> letters[2:5] = []               # 移除这一段元素
>>> letters
['a', 'b', 'f', 'g']
>>> letters[:] = []                 # 用空列表替换所有切片,彻底清空列表
>>> letters
[]

列表还可以相互嵌套(包含其他列表),形成二维或树状数据结构:

>>> a = ['a', 'b', 'c']
>>> n = [1, 2, 3]
>>> x = [a, n]
>>> x
[['a', 'b', 'c'], [1, 2, 3]]
>>> x[0]
['a', 'b', 'c']
>>> x[0][1]
'b'

走向编程的第一步:while 循环与多重赋值

除了简单运算与数据收集,我们还可以让 Python 完成更复杂的自动化任务。官方教程在第 3 章结尾展示了生成**斐波那契数列(Fibonacci series)**的经典例子:

>>> # 斐波那契数列:前两项之和即下一项的值
>>> a, b = 0, 1
>>> while a < 10:
...     print(a)
...     a, b = b, a + b
...
0
1
1
2
3
5
8

这段简洁优美的代码揭示了几个重要的编程基石:

  1. 多重赋值(Multiple Assignment): a, b = 0, 1 同时将变量 a 设为 0、b 设为 1。在循环体内的 a, b = b, a + b 中,右侧表达式 b 与 a + b 是在任何赋值发生之前先同时计算求值的,随后再分别赋给左侧的 a 和 b。这使得交换数值或同时更新状态极为安全便捷。
  2. while 条件循环: 只要 while 后面的条件(如 a < 10)结果为真(True),缩进代码块就会反复执行;一旦条件变为假(False),循环立刻停止。
  3. 冒号与代码块缩进: while a < 10: 行末的冒号宣告代码块的开始,下方属于循环体的每一行必须严格向右缩进(4 个空格)。
  4. 控制输出格式: print() 函数可以使用关键字参数 end 来改变输出结尾(默认是换行符)。例如 print(a, end=' ') 会在数字间输出一个空格而不换行,将结果整齐地输出在同一行。

至此,我们不仅掌握了数字、字符串与列表三种最核心的数据形态,还初窥了让程序自动重复运转的循环机制。在下一关中,我们将全面学习 Python 强大的流程控制工具集!

下一站:条件分支与循环控制 →
© 2026 Python 官方教程