2.5.2 元组类型 tuple

和列表类似,元组也是数据集合体的一种。尽管很多编程语言都没有提供内建的元组数 据类型,但实际上元组类型是非常有用的。在数学中,表示平面或空间中的点需要用到元组 (x,y)或(x,y,z),一般的向量也是元组 v = (v1, ..., vn)。现实中很多信息都可以表示为元组,例 如一对夫妻可以表示为形如(husband,wife)的二元组,超市购物打印出来的单据是形如(商品 名称,单价,数量,总价)的元组的列表,通讯录中记录了大量形如(姓名,电话,地址)的元组,等 等。

Python 提供了元组类型 tuple,该类型的字面值形式是用一对圆括号括起来并以逗号 分隔的多个成员。例如:

>>> t = (1,2,3)
>>> t
(1, 2, 3)
>>> type(t)
<type 'tuple'>

和空列表一样,没有成员的元组是空元组,用()表示。比较特殊的是,如果元组只有 一个成员,仍然需要在该成员后面加上逗号,例如:

>>> (8,)
(8,)
>>> (8)
8

可见 Python 将(8)解释为单个数值 8,而不是元组。 和列表一样,可以通过索引来访问元组的成员。例如:

>>> t[0] 1
>>> t[0:2]
(1, 2)

注意,元组值用圆括号,通过索引访问元组的成员则用方括号。 同样地,列表运算基本上都适用于元组。例如:

>>> t + (4,5) (1, 2, 3, 4, 5)
>>> 3 * t
(1, 2, 3, 1, 2, 3, 1, 2, 3)
>>> len(t) 3

但是,元组和列表之间有个重要的不同:元组是不可更改的。一旦创建了元组,该元组就不能修改、添加、删除成员。在这一点上元组和字符串是相似的。例如如果要将元组 t 的 第 3 个分量改为 8,下面的做法是不行的:

>>> t[2] = 8
Traceback (most recent call last):
File "<pyshell#43>", line 1, in <module> t[2] = 8
TypeError: 'tuple' object does not support item assignment

实在想修改元组的话,只能通过创建新的元组来迂回达到目的。例如:

>>> t = t[0:2] + (8,)
>>> t (1, 2, 8)

例中将 t 的前两个成员和单元素元组(8,)合并,创建了一个新元组,然后将此元组赋值给t。

更多关于元组的知识将在第 6 章介绍。