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的索引

Tuple Built-in Functions::

Below are tuple built-in functions applicable to tuple to perform different tasks:

函数 描述
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