Python 程序设计 - 13. 元组 (tuple)
1. 引言
在 Python 中,元组(tuple)是一种不可变(immutable)的序列类型,与列表(list)类似,但元组一旦创建就不能修改。元组可以存储多个元素,这些元素可以是不同的数据类型。由于其不可变性,元组的操作通常比列表要高效一些。元组经常用于需要保证数据不被修改的场景,或者作为字典的键。
2. 元组的基本概念
元组是通过圆括号(())来定义的,元素之间用逗号(,)分隔。与列表不同,元组的内容一旦定义就无法更改。这种不可变性使得元组在某些情况下比列表更具优势。
定义元组:
# 创建一个空元组
empty_tuple = ()
# 创建一个包含多个元素的元组
fruits = ("apple", "banana", "cherry")
# 元组可以包含不同类型的元素
mixed_tuple = (1, "hello", 3.14, True)
3. 元组的常用操作
3.1 访问元组元素
元组的元素可以通过索引来访问,索引从 0 开始。元组支持负数索引,可以从后向前访问元素。
fruits = ("apple", "banana", "cherry")
# 访问第一个元素
print(fruits[0]) # 输出: apple
# 访问最后一个元素
print(fruits[-1]) # 输出: cherry
3.2 元组切片
与列表类似,元组也支持切片操作,能够提取元组的一个子集。
fruits = ("apple", "banana", "cherry", "date", "elderberry")
# 提取从第2个元素到第4个元素的子元组
sub_fruits = fruits[1:4]
print(sub_fruits) # 输出: ('banana', 'cherry', 'date')
3.3 修改元组元素
元组是不可变的,意味着一旦创建就不能修改其中的元素。如果你尝试修改元组的元素,Python 会抛出 TypeError。
fruits = ("apple", "banana", "cherry")
# fruits[1] = "orange" # 会引发 TypeError: 'tuple' object does not support item assignment
3.4 拼接元组
可以通过 + 运算符将两个元组连接成一个新的元组,原来的元组不会发生变化。
tuple1 = (1, 2, 3)
tuple2 = (4, 5, 6)
# 使用 + 运算符连接两个元组
combined_tuple = tuple1 + tuple2
print(combined_tuple) # 输出: (1, 2, 3, 4, 5, 6)
3.5 重复元组
通过 * 运算符可以重复元组中的元素,生成一个新的元组。
tuple1 = (1, 2, 3)
# 使用 * 运算符重复元组
repeated_tuple = tuple1 * 3
print(repeated_tuple) # 输出: (1, 2, 3, 1, 2, 3, 1, 2, 3)
3.6 元组的长度
可以使用 len() 函数来获取元组的长度,即元组中元素的个数。
fruits = ("apple", "banana", "cherry")
print(len(fruits)) # 输出: 3
3.7 查找元素
可以使用 in 运算符检查某个元素是否在元组中,返回布尔值。
fruits = ("apple", "banana", "cherry")
# 检查元素是否在元组中
print("banana" in fruits) # 输出: True
print("orange" in fruits) # 输出: False
3.8 元组的嵌套
元组可以包含其他元组,形成嵌套元组。访问嵌套元组的元素时,需要使用多重索引。
nested_tuple = ((1, 2, 3), (4, 5, 6), (7, 8, 9))
# 访问第二个子元组的第三个元素
print(nested_tuple[1][2]) # 输出: 6
4. 元组与列表的区别
| 特性 | 元组 (tuple) | 列表 (list) |
|---|---|---|
| 可变性 | 不可变(immutable) | 可变(mutable) |
| 定义方式 | 使用圆括号 () | 使用方括号 [] |
| 元素修改 | 无法修改元素 | 可以修改元素 |
| 性能 | 由于不可变,通常比列表更高效 | 可变性导致性能较低 |
| 用途 | 常用于需要保证数据不被修改的场合 | 通常用于需要修改数据的场合 |
| 支持的操作 | 支持切片、连接、重复等 | 支持所有元组的操作,以及添加、删除等 |
5. 元组常见方法
| 方法 | 描述 |
|---|---|
tuple.count(x) | 返回元素 x 在元组中出现的次数 |
tuple.index(x) | 返回元素 x 在元组中的索引位置(如果元素不存在会抛出异常) |
注意:与列表不同,元组不支持 append()、remove()、insert()、pop() 等方法,因为它是不可变的。
6. 元组的应用场景
元组在以下场景中尤为有用:
- 作为不可变的数据结构:当需要一个不能修改的集合时,可以使用元组。
- 作为字典的键:由于元组是不可变的,它可以作为字典的键,而列表不行。
- 返回多个值:元组可以用来从函数中返回多个值。例如,Python 的
divmod()函数返回一个包含商和余数的元组。
def divide(x, y):
return x // y, x % y
result = divide(10, 3)
print(result) # 输出: (3, 1)
7. 练习题
练习 1:访问元组元素
fruits = ("apple", "banana", "cherry")
print(fruits[1]) # 输出: banana
练习 2:元组的拼接和重复
tuple1 = (1, 2, 3)
tuple2 = (4, 5, 6)
print(tuple1 + tuple2) # 输出: (1, 2, 3, 4, 5, 6)
print(tuple1 * 2) # 输出: (1, 2, 3, 1, 2, 3)
练习 3:检查元素是否存在于元组中
tuple1 = ("apple", "banana", "cherry")
print("banana" in tuple1) # 输出: True
print("orange" in tuple1) # 输出: False
练习 4:使用 count() 和 index()
tuple1 = (1, 2, 3, 2, 4, 2)
print(tuple1.count(2)) # 输出: 3
print(tuple1.index(3)) # 输出: 2
8. 总结
元组是 Python 中一种非常重要的序列类型。与列表相比,元组的最大特点是不可变,这使得它在某些情况下更加高效和安全。元组通常用于存储不需要修改的数据,或者作为字典的键。掌握元组的基本操作将帮助你更好地组织和管理数据,尤其是在涉及不可变数据的场景下。
评论区