10 元组
元组:可以理解为不可改变的列表。
元组是一个容器类型,可以是任意类型的对象的有序集合,通过索引访问其中的元素,不可变对象,长度固定不可变,支持异构(同一个元组中元素类型不同)和嵌套。
- 任意对象的有序集合
与字符串和列表类似,元组是一个位置有序的对象的集合(也就是其内容维持从左到右的顺序)。与列表相同,可以嵌入到任何类别的对象中。
- 通过偏移存取
同字符串、列表一样,在元组中的元素通过偏移(而不是键)来访问。它们支持所有基于偏移的操作。例如,索引和分片。
- 属于不可变序列类型
类似于字符串,元组是不可变的,它们不支持应用在列表中任何原处修改操作。与字符串和列表类似,元组是序列,它们支持许多同样的操作。
- 固定长度、异构、任意嵌套
因为元组是不可变的,在不生成一个拷贝的情况下不能增长或缩短。另一方面,元组可以包含其他的复合对象(例如,列表、字典和其他元组等),因此支持嵌套。
- 存储的是对象引用
与列表相似,元组可以看做是对象引用的数组。元组存储指向其他对象的存取点(引用),并且对元组进行索引操作的速度相对较快。
元组定义时,使用括号“( )”表达式,但是也可以省略括号;定义时,最后一个元素后逗号可有可无。
t1=() #定义空元组
t2=(1,) #一般只有一个元素时,逗号不可省略,省略后会认为时一个整数对象
t3=(1,2) #最后一个元素后逗号可有可无
t4=1,2,3,4 #括号可以省略
因不支持原处修改,只有count和index两个查询类的方法,没有修改的方法。除此之外,元组和列表的操作基本一致。
tuple.count(value) 返回value出现的次数
tuple.index((value, [start, [stop]]) 返回首次出现value的index。
>>> tuple1=(1,2,3,1,1,2,4,5,6)
>>> tuple1.count(1)
3
>>> tuple1.index(2)
1
>>> tuple1.index(1,2,5)
3
>>> tuple1.index(1,4)
4
切片:
运算:
t1+t2 连接操作
t2*3
in
not in
说明:元组本身不可变,但是元组中的元素改变会导致元组的显示改变。
为什么我们要用一种类似列表这样的类型,尽管它支持的操作很少?
坦白地说,元组在实际中往往并不像列表这样常用,但是它的关键是不可变性。如果在程序中以列表的形式传递一个对象的集合,它可能在任何地方改变;如果使用元组的话,则不能。也就是说,元组提供了一种完整性的约束,这对于比我们这里所编写的更大型的程序来说是方便的。