Python元组(tuple)详解

通过学习,我们知道列表是可以修改的。然而,有时候我们需要创建一组不可以修改其中的元素的列表,例如表示周一到周日的元素应该是固定不变的,这个时候,元组就派上了用场。Python 将不可以修改元素的值的列表称为元组

元组和列表有两个主要的区别:
  • 首先,元组是不可变的,而列表是可以修改其中的元素的;
  • 其次,元组用圆括号来表示的,而列表是使用方括号来表示的。

Python 创建元组

我们先来创建一个 week 元组,记录从周一到周日的每一天。

>>> week=("Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday")
>>> print(week)
('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday')

当 week 元组创建后,就不能修改、删除和增加元素了。

我们尝试修改其中的元素,看看结果会怎么样。

>>> print(week[1])
Tuesday
>>> week[1]="Tue"
Traceback (most recent call last):
  File "<pyshell#19>", line 1, in <module>
    week[1]="Tue"
TypeError: 'tuple' object does not support item assignment

我们先打印元组中第2个元素,可以看到是 "Tuesday",然后,当我们试图修改它的值的时候,Python 会返回类型错误消息,告诉我们元组类型是不支持数据赋值的。

Python 修改元组变量

虽然不能修改元组中的元素,但是我们可以给存储元组的变量重新赋值。我们还是以 week 元组为例,参见如下的代码:

>>> week=("Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday")
>>> print(week)
('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday')
>>> week=("Mon","Tue","Wed","Thu","Fri","Sat","Sun")
>>> print(week)
('Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun')

我们先定义了变量 week,然后将一个元组赋值给它,并且将其输出到了屏幕上;接下来,将另一个新的元组重新赋值给了变量 week,并且将其输出到了屏幕上。

这次,Python 不会报错了,因为给变量重新赋值是合法的。并且我们看到,变量 week 的值已经变成了最后赋值给它的那个新的元组。

Python 使用元组

元组也有一些常用的方法,我们来看一下。

获取元组的长度

使用 len() 方法可以获取元组的长度。在下面的示例中,元组 week 包含 7 个元素,因此其长度为 7:

>>> week=("Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday")
>>> len(week)
7

查找元组中单个元素的索引

要查找元组中单个元素的索引,使用 index() 方法。我们还是以 week 元组为例,要获取其中元素 "Friday" 的索引,代码如下所示。

>>> week=("Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday")
>>> week.index("Friday")
4

数据类型转换函数 list() 和 tuple()

我们在已经介绍过数据类型转换,可以使用 srt() 函数将非字符串值转换为字符串表示,例如,用 str(8) 将数字 8 转换为字符串 "8"。

与 str() 函数类似,list() 函数和 tuple() 函数可以实现列表和元组之间的类型转换。list() 函数可以将元组转换为列表,而 tuple() 函数可以将列表转换为元组。

例如,我们可以将 week 元组转换为week列表。首先我们将一个元组赋值给变量 week,并将其打印出来,这时可以很清楚地看到,元组的元素是用圆括号括起来的。

>>> week=("Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday")
>>> print(week)
('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday')


然后,我们使用 list() 函数将元组转换为列表,并将其赋值给变量 week。打印出 week 列表,我们可以清晰地看到,列表的元素是用方括号括起来的。之后,我们尝试将 week 列表的第一个元素修改为 "Mon",可以看到修改成功了,而且 Python 没有报错,因为列表是允许修改其中的元素的。

>>> week=list(week)
>>> print(week)
['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
>>> week[0]="Mon"


还可以使用函数 tuple(),将列表转换为元组,这次我们将已经成为列表的 week 变量转换为元组。

>>> week=tuple(week)
>>> print(week)
('Mon', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday')


当变量 week 从列表转换为元组后,我们就不能够修改其中的元素的值了,否则会报错。

>>> week[0]="Monday"
Traceback (most recent call last):
  File "<pyshell#46>", line 1, in <module>
    week[0]="Monday"
TypeError: 'tuple' object does not support item assignment

这里的例子,让我们熟悉了 list() 和 tuple() 函数的用法,也进一步认识到了列表和元组之间的区别。