Python 数据类型 - 元组

在本节中,我们将介绍如何创建和使用另外一种 Python 数据类型-元组。Python 元组类似于Python 列表,不同之处在于元组是不可变的,但列表是可变的。

Python 元组相对于列表的优点:

  1. 元素数据类型不同时主要使用元组,而当元素具有相同的数据类型时使用列表。
  2. 通过元组遍历更快,因为你无法更新元组。
  3. 你可以使用元组的不可变元素作为 Python 字典中的一个键值。 列表不能作为 Python 字典中的一个键值。
  4. 元组保证了对数据的保护,因为它们是不可变的。

创建一个元组

你可以使用括号 () 定义 Python 元组,并用逗号来分隔元素。 元组可以具有任何数据类型的元素。

>>> x = (3, 'pink', 3+8j)
>>> print('x[0] =', x[0])
x[0] = 3
>>> print('x[0:2] =', x[0:2])
x[0:2] = (3, 'pink')
>>> x[0] = 4
TypeError: 'tuple' object does not support item assignment

如果元组只包含一个元素,比如说是字符串,则该元组不会被视为元组,而是将其视为字符串。 举例来说明:

>>> x = ("Python")
>>> print(type(x))
<class 'str'>

你可以在这里看到 x 的数据类型是 str 而不是 tuple。 为了使它能成为一个元组,你可以在其后面添加一个逗号。

>>> x = ("Python",)
>>> print(type(x))
<class 'tuple'>

访问元组元素

元组的元素可以通过以下任何方式访问:

索引

索引操作符[]可以用来访问元组的元素。 元组的索引从 0 开始。如果索引不在范围内(元素未在元组中的索引处定义),则会出现 IndexError。 在这里应该指出,索引必须是一个整数,否则会出现 TypeError

>>> x = (3, 'pink', 3+8j)
>>> print(x[0])
3
>>> print(x[2])
(3+8j)

负索引 Negative Index:

同 Python 列表一样,你可以使用负索引来访问元组元素。

>>> l = (2, 4, 6, 8, 10)
>>> print(l[-1])
10
>>> print(l[-2])
8
>>> print(l[-3])
6

切片:

切片运算符用于从元组中提取一系列元素。

>>> l = (2, 4, 6, 8, 10)
>>> print(l[1:3])		# 打印从位置 1 到位置 3(不含 3)的元素
(4, 6)
>>> print(l[:2])		# 打印从开始到位置 2(不含 2)的元素
(2, 4)
>>> print(l[2:])		# 打印从位置 2(包含 2)开始的元素
(6, 8, 10)
>>> print(l[:])		# 打印整个列表
(2, 4, 6, 8, 10)

拼接元组

两个元组可以同过+操作符拼接起来。

>>> l = (2, 4, 6, 8, 10)
>>> print(l + (12, 14, 16)
(2, 4, 6, 8, 10, 12, 14, 16)

删除元组

元组元素不可删除,因为元组是不可变的。 但是你可以使用del 关键字来删除整个元组。

l = (2, 4, 6, 8, 10)
del l

Python 元组方法:

元组只有两个方法,因为元组是不可变的数据类型:

Python 元组方法 描述
count(a) 范围元组中元素 a 的数量
index(a) 返回元组中第一个匹配元素 a 的索引

适用于元组的内置函数

以下列表中的内置函数适用于元组数据类型。

函数 描述
all() 当元组中的所有元素都为 True 时返回 True。 当元组为空时,它也返回 True
any() 当元组中的任何元素为 True 时返回 True。 当元组为空时,它返回 False
enumerate() 将元组的所有元素的索引和值作为元组返回。 它返回一个枚举对象
len() 返回元组中元素的数量或元组的长度
tuple() 将序列(元组,字符串,字典)转换为元组
max() 返回元组中的最大数字
min() 返回元组中的最小数字
sorted() 返回一个排序元组
sum() 返回元组中所有元素的总和

Python 元组成员检查

Python in 关键字用来检查给定元素是否是元组的成员。

>>> l = (2, 4, 6, 8, 10)
>>> print(5 in l)
False
>>> print(2 in l
True

Python 元组遍历

你可以使用 for 循环来遍历一个元组。

l = (2, 4, 6, 8, 10)
for i in l:
    print(i)
2
4
6
8
10