4.5 数据类型基础——列表¶
内容梗概¶
本课讲解 Python 的列表(list)。老师指出 Python 中没有 C/Java 那样的数组概念,把多项数据放进一个变量访问的结构就是列表,并强调列表是**可变序列**——与字符串(不可变序列)形成对照,但二者同为序列,索引、切片、拼接等操作完全一致。课程演示了列表的三种创建方式(方括号字面量、list() 函数、列表推导式)、元素类型可混合与嵌套、元素赋值修改、+ 拼接和 append() 追加,并辨析了 append 一次只能加一个元素的区别。因列表操作较繁琐,演示改在 VS Code 中进行。
知识点详解¶
什么是列表¶
- (约 00:00) 要把很多项放在一起、当成一个变量/对象访问时,用列表。Python 没有数组概念,列表是最常见的同类结构。
- (约 00:12) 列表是 Python 中的**可变序列**:可以访问其中某个元素并改变它的值;而字符串是不可变序列。
- (约 00:17) 字符串和列表都是序列,操作类似:字符串的大部分操作放到列表上完全一致,列表只因"可变"多出若干操作。
列表的创建方式¶
- (约 00:26) 方式一:方括号字面量。
[]创建空列表;元素用逗号分隔,逗号后加不加空格只是美观问题。 - (约 00:33) 列表特点:元素类型可以不一样,甚至可以嵌套列表本身。如
[1, 'a', [x, y]]共 3 个元素(课堂互动提问),其中第三项本身是个含 2 个元素的列表——"真正的套娃"。 - (约 02:02) 内置函数
len()查看列表长度,例中结果为 3。 - (约 02:45) 方式二:
list()函数。一般用于创建空列表,或传入一个可迭代对象;list()只接收一个参数,list(1, 2, 3)会报错。 - (约 03:07)
list(range(4)):range 生成 0、1、2、3,把这种 range 返回的东西叫**迭代器**(进阶内容,后面课程再讲);现在只需记住list()里要么为空、要么传可迭代对象。 - (约 08:08) 方式三:列表推导式。如
[x for x in range(4)]:从可迭代对象中逐一取出元素,可对每个元素做额外操作后放入新列表。先留个印象,暂时不会用没关系。 - (约 10:05) 应用示例:生成 0~9 的平方列表
[x * x for x in range(10)](range 与切片一样取不到终点值 10)。 - (约 11:15) 答疑:推导式中可以用其他列表代替 range,甚至字符串也可以迭代;只要对象"可迭代"(能循环取出元素)就能用于列表推导式。这叫"语法糖"。
索引与切片¶
- (约 12:59) 列表索引与字符串**一模一样**:从 0 开始,反向从 -1 开始;切片语法与字符串取子串完全一致,不重复展开。
可变序列:元素赋值¶
- (约 13:17) 与字符串的关键不同:列表可以**直接对元素赋值**。如
a[2] = 'hello world'后,列表第三项被覆盖为新内容——这正是"可变"的含义。
拼接与 append¶
- (约 14:27) 拼接与字符串一样用
+号。购物车例子:['口罩', '洗手液'] + ['...', '...']后变成 4 个元素。 - (约 15:31) 新函数
append():在列表**尾部追加一个元素**。 - (约 16:46) 易错点:
append每次只接收一个参数。a.append([1, 2])会把整个列表当作一项塞进去(嵌套);a.append(1, 2)直接报错TypeError: append() takes exactly one argument。想一次展开加入多个元素要用+拼接,如a + [1, 2]。 - (约 18:04) 字符串没有
append,这是列表(可变序列)特有的操作。
for ... in 遍历(预告)¶
- (约 15:48) 答疑:同学问
for x in ...是不是遍历——是的,与 C 语言的 for 循环作用相同但用法有差异,下节课讲循环控制语句时展开。
示例与演示¶
- 在 VS Code 中演示(列表操作较繁琐,不用交互模式)。
- 创建混合类型列表
[1, 'a', [...]],互动提问元素个数(答案 3),len()验证。 - 演示
list(1, 2, 3)报错、list(range(4))得到[0, 1, 2, 3]。 - 列表推导式:
[x for x in range(4)]、[x*x for x in range(10)]生成平方列表;尝试对字符串迭代。 - 演示
a[2] = 'hello world'修改元素。 - 购物车拼接示例;演示
append追加单元素、append 列表变嵌套、append 两个参数报错。
重点与难点¶
- 可变 vs 不可变:列表可变(支持元素赋值、append),字符串不可变——这是本章的主线对比。
- 序列共性:索引、负索引、切片、
+拼接与字符串完全一致,可迁移学习。 - 嵌套与计数:列表里套列表,外层只算一个元素;
len()数的是顶层元素个数。 list()只收一个参数;append()只收一个参数(塞列表会变嵌套,不是展开)。- range 返回的是迭代器;列表推导式是语法糖,暂时会用即可,迭代章节再深入。
关联内容¶
- 承上:直接复用 4.2 字符串的索引/切片/拼接知识,并以"可变/不可变序列"与字符串对照。
- 启下:
for ... in遍历、迭代器/可迭代对象在后续循环控制语句与迭代章节展开;列表推导式在迭代期详讲。 - 数据类型进阶将讲元组、字典等更多可放进列表的类型。
- 前置知识:range 在此前课程中已简单提过。