在学习完列表(list)之后,你会发现 Python 中的序列类型非常灵活。但除了可变的列表,还有一种不可变 的序列类型------元组(tuple)。 元组在数据处理、函数返回值、解包操作等场景中都非常常见,是 Python 程序员必须掌握的基础结构之一。
一 什么是元组(tuple)
元组(Tuple)是一个有序、不可变 的序列类型。 它与列表类似,也可以存放多个不同类型的元素,但一旦创建,内容就不能被修改。
创建元组使用小括号 (),元素之间用逗号分隔:
python
t = (1, 2, 3)
print(t)
输出:
scss
(1, 2, 3)
你可以把元组看作是"不可修改的列表"。
二 元组的创建方式
1. 使用小括号创建
python
t1 = (1, 2, 3)
2. 不加括号,直接用逗号分隔
python
t2 = 1, 2, 3
print(t2) # (1, 2, 3)
Python 会自动将多个逗号分隔的值识别为一个元组。
3. 单元素元组的特殊写法
如果只有一个元素,需要加上逗号,否则不会被识别为元组。
python
t3 = (5,) # 正确写法
t4 = (5) # 错误,这只是一个整数
print(type(t3)) # <class 'tuple'>
print(type(t4)) # <class 'int'>
4. 使用 tuple() 函数创建
python
t5 = tuple([1, 2, 3])
print(t5) # (1, 2, 3)
三 元组的访问与切片
元组的访问方式与列表完全一致。
python
t = ('apple', 'banana', 'cherry')
print(t[0]) # apple
print(t[-1]) # cherry
print(t[0:2]) # ('apple', 'banana')
四 元组的不可变性
元组的最大特点就是不可变,意味着你不能对其进行修改、添加或删除操作。
python
t = (1, 2, 3)
t[0] = 99 # ❌ 报错
报错信息:
php
TypeError: 'tuple' object does not support item assignment
虽然元组本身不可变,但如果元组中包含可变对象(比如列表),列表的内容是可以改变的。
python
t = (1, [2, 3], 4)
t[1].append(5)
print(t) # (1, [2, 3, 5], 4)
这说明:元组的引用不可变,但引用的对象本身可以变。
五 元组的常用操作
1. 拼接与重复
python
a = (1, 2)
b = (3, 4)
print(a + b) # (1, 2, 3, 4)
print(a * 3) # (1, 2, 1, 2, 1, 2)
2. 成员判断
python
t = (10, 20, 30)
print(20 in t) # True
print(100 not in t) # True
3. 遍历元组
python
for item in ('A', 'B', 'C'):
print(item)
4. 获取长度与最大最小值
python
t = (5, 3, 8, 1)
print(len(t)) # 4
print(max(t)) # 8
print(min(t)) # 1
六 元组的解包(Unpacking)
Python 支持对元组进行"解包"操作,即一次性将元组的多个值赋给多个变量。
python
person = ('Alice', 25, 'Developer')
name, age, job = person
print(name) # Alice
print(age) # 25
print(job) # Developer
还可以使用星号 * 接收不确定数量的元素:
python
a, *b = (1, 2, 3, 4, 5)
print(a) # 1
print(b) # [2, 3, 4, 5]
七 元组的应用场景
1. 函数返回多个值
python
def get_user_info():
return "Tom", 28, "Engineer"
name, age, job = get_user_info()
print(name, age, job)
2. 作为字典的键
由于元组是不可变的,因此可以作为字典的键使用,而列表不行。
python
pos = {(0, 0): 'A', (1, 1): 'B'}
print(pos[(0, 0)]) # A
3. 固定结构的数据存储
当数据在逻辑上不会被修改时,用元组更安全也更高效,比如坐标点 (x, y)、RGB 颜色 (r, g, b) 等。
八 小结
| 特性 | 列表(list) | 元组(tuple) |
|---|---|---|
| 是否可变 | ✅ 可变 | ❌ 不可变 |
| 语法符号 | [] |
() |
| 典型用途 | 需要修改的数据集合 | 固定结构的数据 |
| 可作为字典键 | ❌ 否 | ✅ 是 |
九 实战示例:学生信息表
python
students = [
('Tom', 20, 'A'),
('Lucy', 19, 'B'),
('Jack', 21, 'A')
]
for name, age, grade in students:
print(f"{name} 的年龄是 {age},成绩等级为 {grade}")
输出:
css
Tom 的年龄是 20,成绩等级为 A
Lucy 的年龄是 19,成绩等级为 B
Jack 的年龄是 21,成绩等级为 A
通过元组存储固定结构的数据,使代码结构清晰且高效。
✅ 总结
- 元组是有序、不可变的序列类型。
- 用小括号
()或逗号创建,单元素元组必须加逗号。 - 支持索引、切片、拼接、遍历等操作。
- 不可变性让元组更安全,也能作为字典键。
- 常用于函数多值返回、数据打包与解包、固定结构存储等场景。