元组
概念
元组是 Python 中一个非常重要的内置数据结构,它与列表(list)相似但具有关键差异。下面我将从多个维度详细介绍元组。
1.基本特性
- 不可变序列:创建后不能修改(没有添加、删除、修改元素的方法)
- 有序集合:元素按插入顺序保存,可通过索引访问
- 异构元素:可以包含不同类型的对象
- 允许重复:可以有重复的元素
2.创建元组
# 使用圆括号(最常见)
t1 = (1, 2, 3)
# 不使用括号(逗号才是关键)
t2 = 1, 2, 3
# 单元素元组(必须有逗号)
t3 = (1,) # 是元组
t4 = (1) # 不是元组,是整数1
# 空元组
t5 = ()
t6 = tuple()
# 从可迭代对象创建
t7 = tuple([1, 2, 3]) # (1, 2, 3)
t8 = tuple("abc") # ('a', 'b', 'c')
3.访问元素
my_tuple = ('a', 'b', 'c', 'd', 'e')
# 正向索引(从0开始)
print(my_tuple[0]) # 'a'
print(my_tuple[2]) # 'c'
# 负向索引(从-1开始)
print(my_tuple[-1]) # 'e'
print(my_tuple[-3]) # 'c'
# 切片操作
print(my_tuple[1:3]) # ('b', 'c')
print(my_tuple[:2]) # ('a', 'b')
print(my_tuple[2:]) # ('c', 'd', 'e')
print(my_tuple[::2]) # ('a', 'c', 'e') 步长为2
4.元组的不可变性
t = (1, 2, 3)
# 尝试修改会引发TypeError
t[0] = 10 # TypeError: 'tuple' object does not support item assignment
# 但可以重新赋值(绑定到新元组)
t = (4, 5, 6) # 这是允许的
5.元组操作
# 连接元组
t1 = (1, 2)
t2 = (3, 4)
t3 = t1 + t2 # (1, 2, 3, 4)
# 重复元组
t4 = t1 * 3 # (1, 2, 1, 2, 1, 2)
# 成员检查
print(2 in t1) # True
print(5 in t1) # False
# 长度
print(len(t1)) # 2
# 比较(按元素顺序比较)
print((1, 2) < (1, 3)) # True
6.元组解包
# 基本解包
point = (10, 20)
x, y = point
print(x) # 10
print(y) # 20
# 交换变量
a, b = 1, 2
a, b = b, a # a=2, b=1
# 使用*收集剩余元素
first, *middle, last = (1, 2, 3, 4, 5)
# first=1, middle=[2,3,4], last=5
# 函数返回多个值
def get_stats(numbers):
return min(numbers), max(numbers), sum(numbers)/len(numbers)
min_val, max_val, avg_val = get_stats([1, 2, 3, 4, 5])
7.命名元组
from collections import namedtuple
# 创建命名元组类型
Point = namedtuple('Point', ['x', 'y'])
# 实例化
p = Point(10, y=20)
# 访问
print(p.x) # 10
print(p[0]) # 10 (仍然支持索引)
print(p.y) # 20
8.元组与列表的比较
特性 | 元组 (Tuple) | 列表 (List) |
---|---|---|
可变性 | 不可变 | 可变 |
语法 | 使用圆括号 () | 使用方括号 [] |
性能 | 更快的迭代和访问 | 稍慢 |
内存占用 | 更小 | 更大 |
使用场景 | 固定数据、字典键等 | 需要修改的数据集合 |
方法 | 较少(不可变) | 丰富(append等) |
9.元组的优势
- 性能更好:元组比列表操作更快,特别是在大量数据时
- 线程安全:由于不可变,天然线程安全
- 可哈希性:可以作为字典的键或集合的元素
- 保证数据完整性:防止意外修改
- 作为函数参数和返回值:适合传递多个值
10.适用场景
- 存储不应更改的数据集合
- 字典的键(因为需要可哈希)
- 函数返回多个值
- 作为记录使用(特别是命名元组)
- 参数传递时保持数据不被修改
11.常用方法
t = (1, 2, 2, 3)
# count - 统计元素出现次数
print(t.count(2)) # 2
# index - 返回元素第一次出现的索引
print(t.index(3)) # 3
# 注意:没有append, extend, remove, pop等方法
小结
元组是 Python 中一个简单但强大的数据结构,理解它的特性和适用场景对于编写高效、可靠的 Python 代码非常重要。