Skip to content

Python 元组 (Tuple)

元组是另一种在 Python 中非常重要的数据序列类型。它与列表非常相似,但有一个关键的区别:元组是不可变的 (immutable)

什么是元组?

元组是一个有序不可变的集合。一旦创建,你无法修改、添加或删除元组中的元素。

创建元组

元组由小括号 () 定义,其中的元素用逗号 , 分隔。

python
# 创建一个空元组
empty_tuple = ()

# 包含整数的元组
numbers = (1, 2, 3, 4, 5)

# 包含混合数据类型的元组
mixed_tuple = (1, "hello", 3.14, True)

# 也可以使用 tuple() 构造函数
from_list = tuple([1, 2, 3]) # 从列表创建元组

# 创建时可以省略括号
my_tuple = 1, "a", "b" # 这也是一个元组
print(my_tuple) # 输出: (1, 'a', 'b')

注意:创建只包含一个元素的元组

如果你想创建一个只包含一个元素的元组,你必须在该元素后面加上一个逗号 ,

python
single_element_tuple = (42,) # 这是一个元组
not_a_tuple = (42)          # 这只是整数 42

print(type(single_element_tuple)) # 输出: <class 'tuple'>
print(type(not_a_tuple))          # 输出: <class 'int'>

访问元组元素

访问元组元素的方式与列表完全相同,通过索引切片

python
my_tuple = ('p', 'y', 't', 'h', 'o', 'n')

print(my_tuple[0])   # 输出: 'p'
print(my_tuple[-1])  # 输出: 'n'
print(my_tuple[1:4]) # 输出: ('y', 't', 'h')

元组是不可变的

这是元组与列表最核心的区别。任何试图修改元组的操作都会导致 TypeError

python
my_tuple = (1, 2, 3)

# 下面的操作都会引发错误
# my_tuple[0] = 99      # TypeError: 'tuple' object does not support item assignment
# my_tuple.append(4)    # AttributeError: 'tuple' object has no attribute 'append'
# my_tuple.remove(1)    # AttributeError: 'tuple' object has no attribute 'remove'

为什么使用元组?

既然列表功能更全,为什么还需要元组?

  1. 数据完整性:由于元组不可变,你可以确保其内容在程序运行过程中不会被意外修改。这使得代码更安全、更可预测。非常适合用作常量集合。

  2. 性能优化:通常情况下,元组的处​​理速度比列表稍快,占用的内存也更少。

  3. 可作为字典的键:因为元组是不可变的(可哈希的),所以它可以作为字典的键。列表是可变的,不能作为字典的键。

    python
    locations = {
        (35.6895, 139.6917): "Tokyo",
        (40.7128, -74.0060): "New York"
    }

元组方法

由于不可变,元组的方法很少,只有两个:

  • tuple.count(x): 返回元素 x 在元组中出现的次数。
  • tuple.index(x): 返回元素 x 在元组中首次出现的索引。

元组解包 (Tuple Unpacking)

这是一个非常方便和 Pythonic 的特性,允许你将元组中的元素赋值给多个变量。

python
# 定义一个元组
user_profile = ("John Doe", 30, "john.doe@example.com")

# 解包
name, age, email = user_profile

print(name)  # 输出: John Doe
print(age)   # 输出: 30
print(email)# 输出: john.doe@example.com

这个特性在函数返回多个值时特别有用,因为函数返回的多个值实际上是被打包成一个元组返回的。

本站内容仅供学习和研究使用。