
4.4 元组
还有一种序列是元组,它与列表十分类似,不同之处在于,列表中的元素可以被修改,而元组中的元素不能修改;在写法上,列表使用方括号定义,而元组使用圆括号定义。
4.4.1 直接创建元组

最基本的方法是用圆括号创建元组,括号里的元素用逗号隔开。逗号必须存在,当元组中仅有一个元素时,在其后面必须加上逗号来消除歧义。Python中,用来定义元组的关键信息是逗号,有时圆括号都可以省略。使用圆括号时,若不向圆括号中输入任何元素,则会创建一个空元组。
【例4-14】用圆括号创建元组。

程序运行结果如图4-15所示。

图4-15 创建元组运行程序
4.4.2 用tuple()函数创建元组

使用tuple()函数能够将其他数据结构对象转换成元组的类型。常见的是将一个列表转换成元组,需要先创建一个列表并把元素存入其中。tuple()在使用时需要在列表最外层加入圆括号来说明转换对象。
【例4-15】用tuple()函数创建元组。

程序运行结果如图4-16所示。

图4-16 创建元组运行程序
4.4.3 元组元素提取

元组是不可变的元素,虽然不能和列表一样对里面的元素进行增删改,但仍然可以对元组内的元素进行索引、访问、提取和切片的操作。其中,对于元组元素的提取,可以使用元组解包简化赋值操作。
(1)索引提取元素:利用序列的索引进行元素提取。通过元素的位置提取元素,需要注意元组的长度,不能超出索引范围。
【例4-16】索引访问元素。

程序运行结果如图4-17所示。

图4-17 索引提取元素运行程序
(2)切片提取元素:获取元组的切片,无须考虑超出索引范围的问题。需要注意的是,元组的切片也是一个元组。
【例4-17】切片访问元素。

程序运行结果如图4-18所示。

图4-18 切片提取元素运行程序
(3)元组解包:利用Python语言的灵活性,将元组中的元素赋值给多个变量。
【例4-18】元组解包。

程序运行结果如图4-19所示。

图4-19 元组解包运行程序
4.4.4 元组常用操作方法

由于元组无法修改元素,相对于列表操作的范围就比较小,常见的仍然是对元组进行元素位置查询等操作。下面列出了一些常用于操作元组的方法。
+:将两个元组合并为一个元组。
*:重复合并同一个元组为一个更长的元组。
len:获取元组长度。
sorted:创建对元素进行排序后的列表。
tuple.count:记录某个元素在元组中出现的次数。
tuple.index:获取元素在元组当中第一次出现的位置的索引。
【例4-19】元组的基本操作。

程序运行结果如图4-20所示。

图4-20 元组基本操作运行程序