当我们需要使用一个不可变的,值排序的,可哈希的数据类型时,元组是一个非常好的选择。Python 提供了两种类型的元组:普通元组和命名元组。下面将分别对这两种元组进行详细的讲解。
普通元组
普通元组是 Python 内置的数据类型之一。元组用小括号来表示,其中的元素通过逗号分隔,可以包含任意类型的对象。元组是不可变的,一旦创建就不能修改。
创建元组
创建元组的语法非常简单,只需要使用小括号来定义元组,并在括号内添加逗号分隔的元素。例如:
tup = (1, 2, 3)
访问元组中的元素
访问元组中的元素非常简单,只需要使用方括号指定元素的下标即可。例如:
tup = (1, 2, 3)
print(tup[0]) # 1
更新元组中的元素
由于元组是不可变的,因此我们无法直接更新元组中的元素。如果我们尝试修改元组中的元素,将会发生 TypeError 错误。例如:
tup = (1, 2, 3)
tup[1] = 22 # TypeError: 'tuple' object does not support item assignment
元组的基本操作
元组支持的基本操作和列表非常相似,包括以下操作:
- 拼接:使用加号(+)将两个元组进行拼接。例如:
tup1 = (1, 2, 3)
tup2 = (4, 5, 6)
tup3 = tup1 + tup2
print(tup3) # (1, 2, 3, 4, 5, 6)
- 重复:使用乘号(*)将一个元组重复多次。例如:
tup1 = (1, 2, 3)
tup2 = tup1 * 3
print(tup2) # (1, 2, 3, 1, 2, 3, 1, 2, 3)
- 切片:使用方括号和冒号来指定元组的切片。例如:
tup = (1, 2, 3, 4, 5)
print(tup[1:3]) # (2, 3)
命名元组
命名元组(namedtuple)是一个工厂函数,用于创建一个新的元组子类,并给子类的每个字段都赋予一个名称。使用命名元组可以让代码更加简洁、易于阅读。
创建命名元组
要创建一个命名元组子类,首先需要导入 namedtuple 函数:
from collections import namedtuple
接下来,使用 namedtuple 函数来定义新的元组子类。函数的第一个参数是类名,第二个参数是字段名称,以逗号分隔。例如:
Point = namedtuple('Point', ['x', 'y'])
这将创建一个名为 Point 的新元组子类,其中包含名为 x 和 y 的两个字段。
创建命名元组的实例
创建命名元组实例的语法与普通元组相同,只需要使用元组的实例化语法即可。例如:
p = Point(1, 2)
访问命名元组中的元素
访问命名元组中的元素与访问普通元组中的元素非常相似,只需要使用点号(.)和字段名称访问即可。例如:
p = Point(1, 2)
print(p.x) # 1
print(p.y) # 2
更新命名元组中的元素
由于命名元组是不可变的,因此我们无法直接更新命名元组中的元素。如果我们尝试修改命名元组中的元素,将会发生 AttributeError 错误。例如:
p = Point(1, 2)
p.x = 3 # AttributeError: can't set attribute
命名元组的基本操作
命名元组支持的基本操作和普通元组非常相似,包括拼接、重复和切片等操作。例如:
Point = namedtuple('Point', ['x', 'y'])
p1 = Point(1, 2)
p2 = Point(3, 4)
p3 = p1 + p2 # TypeError: unsupported operand type(s) for +: 'Point' and 'Point'
p4 = p1 * 3 # TypeError: unsupported operand type(s) for *: 'Point' and 'int'
print(p1[1:2]) # (2,)
从上面的示例中可以看出,命名元组仅支持通过下标来访问元素,不支持拼接、重复等操作。
总结:
本文讲解了 Python 中的元组和命名元组使用方法的完整攻略。元组是 Python 内置的数据类型之一,具有不可变、值排序、可哈希等特性。命名元组是一个工厂函数,用于创建一个新的元组子类,并给子类的每个字段都赋予一个名称,可以让代码更加简洁、易于阅读。