Python的组合数据类型-元组

元组

元组是有序序列,其中包含0个或多个对象引用。元组被称为只读列表,即数据可以被查询但不能被修改,所以列表的切片操作同样适用于元组。如果需要修改有序序列应该使用列表而非元组。如果有一个元组需要对其进行修改,则可以使用 list() 转换函数将其转换为列表之后在产生的列表之上进行适当修改。

tuple 数据类型可以作为函数进行调用,tuple()——不带参数将返回一个空元组,带一个 tuple 类参数将返回该参数的浅拷贝,对其他任意参数将尝试把给定的对象转换为 tuple 类型。该函数最多只能接受一个参数。虽然 tuple 的元素不可改变,但它可以包含可变的对象,比如 list 列表

如何创建元组

元组写在小括号(),元素之间用逗号隔开。元组也可以使用 tuple() 函数创建,空元组是使用空的圆括号 () 创建的,包含一个或多个项的元组则可以使用逗号分隔进行创建。有时元组必须包含在圆括号中,以避免发生歧义。如果需要将元组 1,2,3 传递给一个函数,就应该写成 function((1,2,3)) 的形式

构造包含 0 个或 1 个元素的元组比较特殊,所以有一些额外的语法规则:

1
2
tup1 = ()    # 空元组
tup2 = (20,) # 一个元素,需要在元素后添加逗号

元组的作用

  • 对于一些数据我们不想被修改,可以使用元组;
  • 元组可以在映射(和集合的成员)中当作键使用——而列表则不行;元组作为很多内建函数和方法的返回值存在

元组的方法

元组只提供了两种方法:t.count(x) ,返回对象 x 在元组中出现的次数;t.index(x) ,返回对象在元组 t 中出现的最左边位置——元组中不包含 x 时则产生ValueError异常。

元组操作符

元组可以使用操作符 + (连接)、* (复制) 与 [] (分片),也可以使用 innot in 来测试成员关系。虽然元组是固定对象,但 +=*= 这两个增强的赋值运算符也可以使用——实际上是 Python 创建了新元组用于存放结果,并将左边的对象引用设置为指向新元组。元组可以使用标准的比较操作符( <<===!=>=> )进行比较,这种比较实际是逐项进行的(对嵌套项,比如元组内的元组,递归进行处理)。示例:

1
2
3
4
5
>>> hair = "black", "brown", "blonde", "red"
>>> hair[2]
'blonde'
>>> hair[-3:] # same as: hair[l:]
('brown', 'blonde', 'red')
1
2
>>> hair[:2], "gray", hair[2:]
(('black', 'brown'), 'gray', ('blonde', 'red'))

这里本来是想创建一个新的五元组,但结果是一个三元组,其中包含两个二元组,之所以会这样是因为在3个项(一个元组,一个字符串,一个元组)之间使用了逗号操作符。要得到一个单独的元组,并包含所需项必须对其进行连接:

1
2
>>> hair[:2] + ("gray",) + hair[2:]
('black', 'brown', 'gray', 'blonde', 'red')

要构成一个一元组逗号是必需的,但在这一情况下,将逗号放置在其中,就会产生一个 TypeError (因为 Python 会认为我们试图将字符串与元组进行连接),因此必须同时使用逗号与圆括号

有钱任性,请我吃包辣条
0%