05 元组基础
元组(Tuple)是 Python 中一种不可变的序列类型,用于存储多个有序元素。与列表(List)不同,元组一旦创建,其内容不可修改。元组通常用于存储不应被更改的数据集合,例如坐标、配置参数等。
元组的定义使用圆括号 (),元素之间用逗号分隔:
| my_tuple = (1, 2, 3, "hello") # 元组也可以装入多个不同的数据类型
|
元组的创建
-
直接赋值:使用圆括号直接定义元组。
-
省略圆括号:在不引起歧义的情况下,可以省略圆括号,仅用逗号分隔元素(但是一般情况下并不建议这么做)。
-
单元素元组:定义单元素元组时,必须在元素后加逗号,否则会被识别为普通变量。
| single_tuple = (7,) # 正确
not_a_tuple = (8) # 错误,实际上是整数 8
|
-
使用 tuple() 函数:将其他可迭代对象(如列表、字符串)转换为元组。
| list_data = [1, 2, 3]
tuple3 = tuple(list_data) # 结果为 (1, 2, 3)
|
元组一旦创建,其内容不可修改(添加、删除或替换元素)。尝试修改会引发 TypeError:
| my_tuple = (1, 2, 3)
my_tuple[0] = 10 # 报错:TypeError 'tuple' object does not support item assignment
|
元组的访问
-
索引访问:通过下标访问元组中的元素。
| tuple1 = (1, 2, 3, 4, 5)
print(tuple1[2]) # 3
print(tuple1[-1]) # 5
|
-
切片操作:提取子元组。
| tuple1 = (1, 2, 3, 4, 5)
print(tuple1[1:3]) # (2, 3)
print(tuple1[:3]) # (1, 2, 3)
print(tuple1[3:]) # (4, 5)
print(tuple1[:]) # (1, 2, 3, 4, 5)
print(tuple1[::2]) # (1, 3, 5)
print(tuple1[::-1]) # (5, 4, 3, 2, 1)
|
元组的常见操作
-
拼接元组:使用 + 运算符拼接多个元组。
| tuple1 = (1, 2)
tuple2 = (3, 4)
combined = tuple1 + tuple2 # 结果为 (1, 2, 3, 4)
|
-
重复元组:使用 * 运算符重复元组内容。
| repeated = (1, 2) * 3 # 结果为 (1, 2, 1, 2, 1, 2)
|
-
成员检查:使用 in 检查元素是否存在于元组中。
| my_tuple = (10, 20, 30)
print(20 in my_tuple) # 输出 True
|
-
元组支持解包(Unpacking),允许将元组元素赋值给多个变量:
| my_tuple = (1, 2, 3)
a, b, c = my_tuple
print(a, b, c) # 输出 1 2 3
|
元组的高级用法
-
命名元组:使用 collections.namedtuple 创建具有字段名的元组,增强可读性。
| from collections import namedtuple
PointV = namedtuple("Point", ["x", "y"])
p = PointV(10, 20)
print(p.x, p.y) # 输出 10 20
print(p) # Point(x=10, y=20)
|
-
元组作为字典键:元组是不可变的,因此可以作为字典的键,而列表不行。
| coordinates = {(1, 2): "A", (3, 4): "B"}
print(coordinates[(1, 2)]) # 输出 "A"
|
-
函数返回多个值:函数可以通过元组返回多个值。
| def get_values():
return 1, 2, 3
a, b, c = get_values() # 解包返回值
|
元组与列表的对比
| 特性 |
元组 (Tuple) |
列表 (List) |
| 可变性 |
不可变 |
可变 |
| 定义符号 |
() |
[] |
| 性能 |
更快 |
较慢 |
| 适用场景 |
数据保护、字典键 |
动态数据操作 |
元组比列表更轻量级,访问速度更快,适合存储不变数据,同时元组是 Python 中一种高效且安全的数据结构。在需要高性能的场景(如大量数据读取)中,优先使用元组,通过合理使用元组,可以提高代码的可读性和性能。