Python 使用元组和命名元组

  • Post category:Python

当我们需要使用一个不可变的,值排序的,可哈希的数据类型时,元组是一个非常好的选择。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 内置的数据类型之一,具有不可变、值排序、可哈希等特性。命名元组是一个工厂函数,用于创建一个新的元组子类,并给子类的每个字段都赋予一个名称,可以让代码更加简洁、易于阅读。