精通 Python 元组:创建、访问与进阶操作
Python 元组
探索 Python 元组的威力——不可变序列为异构数据提供速度、安全性和通用性。本指南从基础语法到进阶操作,助你理解何时选择元组而非列表。
视频:Python 列表与元组
元组行为类似列表,但创建后不可变。与列表不同,你无法修改其元素,使元组成为固定数据集的理想选择。
创建元组
元组通过将逗号分隔的值放入圆括号 () 定义。括号虽可选,但能提升可读性。
元组可包含任意数量项并混合数据类型——整数、浮点数、字符串、列表、其他元组等。
# 不同类型的元组
# 空元组
my_tuple = ()
print(my_tuple)
# 整数元组
my_tuple = (1, 2, 3)
print(my_tuple)
# 混合数据类型
my_tuple = (1, "Hello", 3.4)
print(my_tuple)
# 嵌套元组
my_tuple = ("mouse", [8, 4, 6], (1, 2, 3))
print(my_tuple)
输出
() (1, 2, 3) (1, 'Hello', 3.4) ('mouse', [8, 4, 6], (1, 2, 3))
元组也可不加括号创建——称为元组打包。
my_tuple = 3, 4.6, "dog"
print(my_tuple)
# 元组解包
a, b, c = my_tuple
print(a)
print(b)
print(c)
输出
(3, 4.6, 'dog') 3 4.6 dog
单元素元组需加尾随逗号,以区别于普通值。
my_tuple = ("hello")
print(type(my_tuple)) # <class 'str'>
# 单元素元组
my_tuple = ("hello",)
print(type(my_tuple)) # <class 'tuple'>
# 括号可选
my_tuple = "hello",
print(type(my_tuple)) # <class 'tuple'>
输出
<class 'str'> <class 'tuple'> <class 'tuple'>
访问元组元素
元组支持多种元素访问方法:
1. 索引
使用索引操作符 [],零基索引。越界访问引发 IndexError;非整数索引引发 TypeError。
# 索引示例
my_tuple = ('p','e','r','m','i','t')
print(my_tuple[0]) # 'p'
print(my_tuple[5]) # 't'
# 嵌套索引
n_tuple = ("mouse", [8, 4, 6], (1, 2, 3))
print(n_tuple[0][3]) # 's'
print(n_tuple[1][1]) # 4
输出
p t s 4
2. 负索引
负索引从末尾计数:-1 为最后一个元素。
# 负索引
my_tuple = ('p', 'e', 'r', 'm', 'i', 't')
print(my_tuple[-1]) # 't'
print(my_tuple[-6]) # 'p'
输出
t p
3. 切片
使用 start:stop 语法提取子元组。
# 切片示例
my_tuple = ('p','r','o','g','r','a','m','i','z')
print(my_tuple[1:4]) # ('r', 'o', 'g')
print(my_tuple[:-7]) # ('p', 'r')
print(my_tuple[7:]) # ('i', 'z')
print(my_tuple[:]) # 完整元组
输出
('r', 'o', 'g') ('p', 'r') ('i', 'z') ('p', 'r', 'o', 'g', 'r', 'a', 'm', 'i', 'z')

修改元组
元组不可变。直接给元素赋值引发 TypeError:
# 尝试修改
my_tuple = (4, 2, 3, [6, 5])
# my_tuple[1] = 9 # TypeError
但若元素本身可变(如列表),其内部状态可改变:
my_tuple[3][0] = 9
print(my_tuple) # (4, 2, 3, [9, 5])
元组可整体重新赋值:
my_tuple = ('p', 'r', 'o', 'g', 'r', 'a', 'm', 'i', 'z')
print(my_tuple)
用 + 连接,* 重复;均返回新元组。
print((1, 2, 3) + (4, 5, 6)) # (1, 2, 3, 4, 5, 6)
print(("Repeat",) * 3) # ('Repeat', 'Repeat', 'Repeat')
输出
(1, 2, 3, 4, 5, 6) ('Repeat', 'Repeat', 'Repeat')
删除元组
无法移除单个项。可用 del 删除整个元组:
my_tuple = ('p', 'r', 'o', 'g', 'r', 'a', 'm', 'i', 'z')
# del my_tuple[3] # TypeError
del my_tuple
# print(my_tuple) # NameError
输出
Traceback (most recent call last): File "<string>", line 12, in <module> NameError: name 'my_tuple' is not defined
元组方法
元组仅暴露两个内置方法:count() 和 index()。
my_tuple = ('a', 'p', 'p', 'l', 'e')
print(my_tuple.count('p')) # 2
print(my_tuple.index('l')) # 3
输出
2 3
其他元组操作
1. 成员测试
用 in 关键字检查存在性。
my_tuple = ('a', 'p', 'p', 'l', 'e')
print('a' in my_tuple)
print('b' in my_tuple)
print('g' not in my_tuple)
输出
True False True
2. 迭代
用 for 循环遍历元组:
for name in ('John', 'Kate'):
print("Hello", name)
输出
Hello John Hello Kate
3. 相较列表的优势
- 适合异构数据;列表通常同构。
- 不可变性在迭代时提供性能优势。
- 仅含不可变元素的元组可作为字典键。
- 写保护数据有保障,防止意外修改。
Python