Python大学实用教程
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.5 元组

元组(tuple)跟列表很相似,从外表看它们的差别就在于[]和()——列表是用方括号包裹,元组是用圆括号包裹。但就是这点不大的差别,让元组这个Python的内置对象有了它的独特之处。

img

这些都是创建元组的方法。从这些所创建的元组可以总结为:元组是用圆括号括起来的,其中的元素之间用逗号(英文状态)隔开。元组中的元素是任意类型的Python对象。

值得注意的是,如果定义的元组中只有一个元素,需要这样做:

img

元组和列表、字符串一样,同属于序列,因此它具有序列的所有特点。

每个元素都对应着自己的索引,并可以切片。

img

序列的基本操作,对于元组也是成立的。

img

元组的这些操作与列表完全一致。有不一样的地方吗?

img

这就显示了元组和列表的最大差别。列表可以通过索引修改某个元素,但是元组不能如此操作,这说明元组是不可修改的,这个特点类似字符串。

用dir函数查看元组的属性和方法,会看到:

img

所有在列表中可以修改列表的方法,在元组中都不存在了,因为元组不可修改。虽然如此,如果要修改元组,怎么办?

用list函数和tuple函数能够实现列表和元组之间的转化。

img
img

所以,可以先把元组转化为列表,然后进行修改。

读者可能很怀疑元组这种对象的应用场景,既然它与列表有那么多相似处,为什么还要用它呢?

一般认为,元组有如下使用情景:

❖ 元组比列表操作速度快。如果定义了一个值,并且唯一要用它做的是不断地遍历它,那么请使用元组代替列表。

❖ 如果对不需要修改的数据进行“写保护”,即该数据是常量,那么此时使用元组。如果必须改变这些值,则可以转换为列表修改。

❖ 元组可以在字典(又一种对象类型,详见3.6节)中被用作key,但是列表不可以。字典的key必须是不可变的。元组本身就是不可改变的,而列表是可变的。

所以,元组自有其用武之地,既然已经存在于Python中,必然有其合理性。