元组
元组是有序序列,其中包含0个或多个对象引用。元组被称为只读列表,即数据可以被查询但不能被修改,所以列表的切片操作同样适用于元组。如果需要修改有序序列应该使用列表而非元组。如果有一个元组需要对其进行修改,则可以使用 list()
转换函数将其转换为列表之后在产生的列表之上进行适当修改。
tuple
数据类型可以作为函数进行调用,tuple()
——不带参数将返回一个空元组,带一个 tuple
类参数将返回该参数的浅拷贝,对其他任意参数将尝试把给定的对象转换为 tuple
类型。该函数最多只能接受一个参数。虽然 tuple
的元素不可改变,但它可以包含可变的对象,比如 list
列表
如何创建元组
元组写在小括号()
,元素之间用逗号隔开。元组也可以使用 tuple()
函数创建,空元组是使用空的圆括号 ()
创建的,包含一个或多个项的元组则可以使用逗号分隔进行创建。有时元组必须包含在圆括号中,以避免发生歧义。如果需要将元组 1,2,3
传递给一个函数,就应该写成 function((1,2,3))
的形式
构造包含 0 个或 1 个元素的元组比较特殊,所以有一些额外的语法规则:
1 | tup1 = () # 空元组 |
元组的作用
- 对于一些数据我们不想被修改,可以使用元组;
- 元组可以在映射(和集合的成员)中当作键使用——而列表则不行;元组作为很多内建函数和方法的返回值存在
元组的方法
元组只提供了两种方法:t.count(x)
,返回对象 x
在元组中出现的次数;t.index(x)
,返回对象在元组 t
中出现的最左边位置——元组中不包含 x
时则产生ValueError异常。
元组操作符
元组可以使用操作符 +
(连接)、*
(复制) 与 []
(分片),也可以使用 in
与 not in
来测试成员关系。虽然元组是固定对象,但 +=
与 *=
这两个增强的赋值运算符也可以使用——实际上是 Python 创建了新元组用于存放结果,并将左边的对象引用设置为指向新元组。元组可以使用标准的比较操作符( <
、<=
、==
、!=
、>=
、>
)进行比较,这种比较实际是逐项进行的(对嵌套项,比如元组内的元组,递归进行处理)。示例:
1 | "black", "brown", "blonde", "red" hair = |
1 | 2], "gray", hair[2:] hair[: |
这里本来是想创建一个新的五元组,但结果是一个三元组,其中包含两个二元组,之所以会这样是因为在3个项(一个元组,一个字符串,一个元组)之间使用了逗号操作符。要得到一个单独的元组,并包含所需项必须对其进行连接:
1 | 2] + ("gray",) + hair[2:] hair[: |
要构成一个一元组逗号是必需的,但在这一情况下,将逗号放置在其中,就会产生一个 TypeError (因为 Python 会认为我们试图将字符串与元组进行连接),因此必须同时使用逗号与圆括号