小白学 Python
AI 编程指南GitHub
© 2026 小白学 Python · 基于 walter201230/Python 教程
课程目录关于本站联系方式隐私政策GitHub

List 与 Tuple

完整讲解 · 8 段教学·配 7 道练习题·预计 30 分钟

本页是本章的通读版,可直接读完全部讲解。想动手写代码、跑判分,去 闯关模式。

教学 01 / 08

第二节:List 与 Tuple

之前我们学习了字符串,整数,浮点数几种基本数据类型,现在我们接着学习两种新的数据类型——列表(List)和元组(tuple)。

这两种类型是 Python 里最常用的「容器」,能把多个值打包到一起。

教学 02 / 08

一、List(列表)

1、什么是 List(列表)

List(列表)是 Python 内置的一种数据类型。它是一种有序的集合,可以随时添加和删除其中的元素。

那为什么要有 List 呢?我们用一个例子来说明。

现在有一个团队要出去玩,要先报名。如果用我们之前学过的知识,那么就是用一个字符串变量把他们都记录起来。

python到闯关页运行这段 →
name1 = '一点水'
name2 = '两点水'
name3 = '三点水'
name4 = '四点水'
name5 = '五点水'

但是这样太麻烦了,而且也不美观。

在编程中,一定要学会偷懒,避免「重复性工作」。如果有一百个成员,那么你即使是复制粘贴,也会把你写烦。

这时候就可以使用列表了。

python到闯关页运行这段 →
name = ['一点水', '两点水', '三点水', '四点水', '五点水']

就这样,一行代码就可以存放 N 多个名字了。

2、怎么创建 List(列表)

从上面的例子可以分析出,列表的格式是这样的。

name = ['一点水', '两点水', '三点水', '四点水', '五点水']
 ↑   ↑ ↑                                              ↑
列表名 │ 中括号                                        │
       赋值符号                                  逗号分隔

其实列表就是用中括号 [] 括起来的数据,里面的每一个数据就叫做元素。每个元素之间使用逗号分隔。

而且列表的数据元素不一定是相同的数据类型。

比如:

python到闯关页运行这段 →
list1 = ['两点水', 'twowter', 'liangdianshui', 123]
print(list1)

结果如下:

['两点水', 'twowter', 'liangdianshui', 123]

这里有字符串类型,还有整数类型,混在一起也是可以的。

练习 1 / 7创建第一个 List去闯关页做这题 →
教学 03 / 08

3、如何访问 List(列表)中的值

就像一开始的例子,我们有时候不需要把全部人员的姓名都打印出来,有时候我们需要知道第 3 个报名的人是谁?前两名报名的是谁?

那么怎么从列表中取出来呢?

换种问法就是,怎么去访问列表中的值?

这时候我们可以通过列表的下标索引来访问列表中的值,同样你也可以使用方括号的形式截取(切片)字符。

例如:

python到闯关页运行这段 →
name = ['一点水', '两点水', '三点水', '四点水', '五点水']

# 通过索引来访问列表
print(name[2])
# 通过方括号的形式来截取列表中的数据
print(name[0:2])

输出的结果:

三点水
['一点水', '两点水']

可见,我们需要知道 name 这个列表中第三个报名的是谁?只需要用 name[2] 就可以了。

这里你会问,为什么是 2 ,不是 3 呢?

这是因为在编程世界中,都是从 0 开始的,而不是我们生活习惯中从 1 开始。所以需要知道第三个是谁?那就是 name[2] 就可以了。

从例子来看,我们还把 name[0:2] 的结果打印出来了。从打印结果来看,只打印了第一、第二个元素内容。

为什么不是打印前三个啊,不是说 2 就是第 3 个吗?

那是因为这是左闭右开区间的。所以 name[0:2] 的意思就是从第 0 个开始取,取到第 2 个,但是不包含第 2 个。

所以你可以尝试下下面的各种方式:

python到闯关页运行这段 →
name = ['一点水', '两点水', '三点水', '四点水', '五点水']

print(name[0:2])
print(name[:2])
print(name[:])
print(name[1:2])
print(name[0:3])

看看输出的结果:

['一点水', '两点水']
['一点水', '两点水']
['一点水', '两点水', '三点水', '四点水', '五点水']
['两点水']
['一点水', '两点水', '三点水']
练习 2 / 7索引和切片去闯关页做这题 →
教学 04 / 08

4、怎么去更新 List(列表)

还是一开始的例子,我们用代码记录了报名人的名字,那后面可能会有新人加入,也有可能会发现一开始写错名字了,想要修改。

这时候怎么办呢?

可以通过索引对列表的数据项进行修改或更新,也可以使用 append() 方法来添加列表项。

python到闯关页运行这段 →
name = ['一点水', '两点水', '三点水', '四点水', '五点水']

# 通过索引对列表的数据项进行修改或更新
name[1] = '2点水'
print(name)

# 使用 append() 方法来添加列表项
name.append('六点水')
print(name)

输出的结果:

['一点水', '2点水', '三点水', '四点水', '五点水']
['一点水', '2点水', '三点水', '四点水', '五点水', '六点水']

5、怎么删除 List(列表)里面的元素

那既然这样,肯定会有人中途退出的。那么我们就需要在列表中,把他的名字去掉。

这时候使用 del 语句来删除列表的元素:

python到闯关页运行这段 →
name = ['一点水', '两点水', '三点水', '四点水', '五点水']

print(name)

# 使用 del 语句来删除列表的的元素
del name[3]
print(name)

输出的结果:

['一点水', '两点水', '三点水', '四点水', '五点水']
['一点水', '两点水', '三点水', '五点水']

你看输出的结果,列表中已经没有了 四点水 这个数据了,证明已经删除成功了。

练习 3 / 7修改 + 追加去闯关页做这题 →
教学 05 / 08

6、List(列表)运算符

列表对 + 和 * 的操作符与字符串相似。+ 号用于组合列表,* 号用于重复列表。

Python 表达式结果描述
len([1, 2, 3])3计算元素个数
[1, 2, 3] + [4, 5, 6][1, 2, 3, 4, 5, 6]组合
['Hi!'] * 4['Hi!', 'Hi!', 'Hi!', 'Hi!']复制
3 in [1, 2, 3]True元素是否存在于列表中
for x in [1, 2, 3]: print(x)1 2 3迭代

7、List(列表)函数 & 方法

最常用的几个:

函数 / 方法描述
len(list)列表元素个数
max(list)返回列表元素最大值
min(list)返回列表元素最小值
list.append(obj)在列表末尾添加新的对象
list.insert(index, obj)将对象插入指定位置
list.pop()移除并返回列表最后一个元素
list.pop(i)移除并返回索引 i 处的元素
list.remove(obj)移除列表中第一次出现的指定元素(按值删)
list.index(obj)从列表中找出某个值第一次匹配的索引位置
list.count(obj)统计某个元素在列表中出现的次数
list.reverse()反向列表中元素(原地)
list.sort()对原列表排序(原地)

记不住没关系,常用的就是 len、append、pop、sort 这几个,用多了自然熟。

练习 4 / 7拼接与长度去闯关页做这题 →
教学 06 / 08

二、tuple(元组)

1、什么是元组(tuple)

上一节刚说了一个有序列表 List,现在说另一种有序列表叫元组:tuple。

tuple 和 List 非常类似,但是 tuple 一旦初始化就不能修改。也就是说元组(tuple)是不可变的——它没有 append()、insert() 这样的方法,可以通过索引读,但不能赋值。

那么为什么要有 tuple 呢?

那是因为 tuple 是不可变的,所以代码更安全。所以建议能用 tuple 代替 list 就尽量用 tuple。

2、怎样创建元组(tuple)

元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。

python到闯关页运行这段 →
tuple1 = ('两点水', 'twowter', 'liangdianshui', 123, 456)
tuple2 = '两点水', 'twowter', 'liangdianshui', 123, 456  # 括号也可以省

创建空元组:

python到闯关页运行这段 →
tuple3 = ()

元组中只包含一个元素时,需要在元素后面添加逗号:

python到闯关页运行这段 →
tuple4 = (123,)

如果不加逗号,创建出来的就不是元组(tuple),而是指 123 这个整数了。

这是因为括号 () 既可以表示元组,又可以表示数学公式中的小括号——产生了歧义。所以 Python 规定,单元素的时候不加逗号就按小括号算(表达式),加了逗号才是元组。

python到闯关页运行这段 →
tuple4 = (123,)
tuple5 = (123)
print(tuple4)
print(tuple5)

输出:

(123,)
123

看到区别了吗?

练习 5 / 7单元素 tuple 的逗号陷阱去闯关页做这题 →
教学 07 / 08

3、如何访问元组(tuple)

元组下标索引也是从 0 开始,元组(tuple)可以使用下标索引来访问元组中的值,跟列表完全一样。

python到闯关页运行这段 →
tuple1 = ('两点水', 'twowter', 'liangdianshui', 123, 456)

print(tuple1[1])
print(tuple1[0:2])

输出的结果:

twowter
('两点水', 'twowter')

4、修改元组(tuple)

可能看到这个小标题有人会疑问,上面不是说 tuple 是不可变的吗?这里怎么又来修改 tuple 了?

那是因为元组中的元素值不允许直接修改,但我们可以通过修改它内部嵌套的列表的值,间接影响 tuple 的「内容」。

具体看下面这个例子:

python到闯关页运行这段 →
list1 = [123, 456]
tuple1 = ('两点水', 'twowater', 'liangdianshui', list1)
print(tuple1)

list1[0] = 789
list1[1] = 100
print(tuple1)

输出的结果:

('两点水', 'twowater', 'liangdianshui', [123, 456])
('两点水', 'twowater', 'liangdianshui', [789, 100])

可以看到,两次输出的 tuple 值是变了的。我们看看 tuple1 的存储是怎样的:

修改 tuple 的存储结构

可以看到,tuple1 有四个元素,最后一个元素是一个 List,List 列表里有两个元素。

当我们把 List 列表中的两个元素 123 和 456 修改为 789 和 100 的时候,从输出的 tuple1 来看,好像确实是改变了。

但其实变的不是 tuple 的元素,而是 list 的元素。

tuple 一开始指向的 list 并没有改成别的 list,所以,tuple 所谓的「不变」是说,tuple 的每个元素的指向永远不变。注意是 tuple1 中的第四个元素还是指向原来的 list,是没有变的,我们修改的只是列表 List 里面的元素。

5、删除 tuple(元组)

tuple 元组中的元素值是不允许删除的,但我们可以使用 del 语句来删除整个元组:

python到闯关页运行这段 →
tuple1 = ('两点水', 'twowter', 'liangdianshui', [123, 456])
print(tuple1)
del tuple1
练习 6 / 7tuple 取值与切片去闯关页做这题 →
教学 08 / 08

6、tuple(元组)运算符

与字符串和列表一样,元组之间可以使用 + 号和 * 号进行运算。这就意味着他们可以组合和复制,运算后会生成一个新的元组。

Python 表达式结果描述
len((1, 2, 3))3计算元素个数
(1, 2, 3) + (4, 5, 6)(1, 2, 3, 4, 5, 6)连接
('Hi!',) * 4('Hi!', 'Hi!', 'Hi!', 'Hi!')复制
3 in (1, 2, 3)True元素是否存在
for x in (1, 2, 3): print(x)1 2 3迭代

7、元组内置函数

函数描述
len(tuple)计算元组元素个数
max(tuple)返回元组中元素最大值
min(tuple)返回元组中元素最小值
tuple(seq)把可迭代对象(如 list)转换为元组

举个例子综合用一下:

python到闯关页运行这段 →
name1 = ('一点水', '两点水', '三点水', '四点水', '五点水')
list1 = [1, 2, 3, 4, 5]

# 计算元素个数
print(len(name1))
# 元素是否存在 (name1 这个元组中是否含有一点水这个元素)
print('一点水' in name1)
# 将列表转换为元组
print(tuple(list1))

输出:

5
True
(1, 2, 3, 4, 5)
练习 7 / 7list 转 tuple + max去闯关页做这题 →

读完了?动手练一遍才算真会。

去闯关模式练习 →