元组(tuple)是Python中不可变的序列类型,与列表(list)类似但不可修改。
元组使用小括号 ( ),列表使用方括号 [ ]
元组与字符串类似,下标索引从 0 开始,可以进行截取,组合等
目录
1. 创建元组
元组可以通过多种方式创建:
# 使用圆括号创建
tup1 = ('apple', 'banana', 'cherry')
tup2 = (1, 2, 3, 4, 5)
# 单个元素的元组需要在元素后加逗号
single_tup = (5,) # 这是一个元组
not_tup = (5) # 这不是元组,只是一个整数
# 使用tuple()构造函数创建
tup3 = tuple(['a', 'b', 'c']) # 从列表创建
tup4 = tuple('hello') # 从字符串创建
# 空元组
empty_tup = ()
empty_tup2 = tuple()
print(tup1) # 输出: ('apple', 'banana', 'cherry')
print(tup3) # 输出: ('a', 'b', 'c')
2. 访问元组
元组可以通过索引和切片来访问其中的元素:
tup = ('apple', 'banana', 'cherry', 'orange')
# 通过索引访问
print(tup[0]) # 输出: apple
print(tup[2]) # 输出: cherry
# 负索引表示从末尾开始
print(tup[-1]) # 输出: orange
print(tup[-3]) # 输出: banana
3. 修改元组
元组是不可变的,不能直接修改元素,但可以通过以下方式间接"修改":
tup = ('apple', 'banana', 'cherry')
# 直接修改会报错
# tup[1] = 'pear' # TypeError
# 通过重新创建元组来"修改"
tup = tup[:1] + ('pear',) + tup[2:]
print(tup) # 输出: ('apple', 'pear', 'cherry')
# 元组可以包含可变对象,如列表
tup_with_list = (1, 2, [3, 4])
tup_with_list[2][0] = 5 # 可以修改元组中的列表
print(tup_with_list) # 输出: (1, 2, [5, 4])
4. 删除元组
虽然不能删除元组中的单个元素,但可以删除整个元组:
tup = (1, 2, 3)
del tup
# print(tup) # NameError: name 'tup' is not defined
5. 元组运算符
元组支持多种运算符操作:
tup1 = (1, 2, 3)
tup2 = (4, 5, 6)
# 连接 +
print(tup1 + tup2) # 输出: (1, 2, 3, 4, 5, 6)
# 重复 *
print(tup1 * 3) # 输出: (1, 2, 3, 1, 2, 3, 1, 2, 3)
# 成员运算 in
print(2 in tup1) # 输出: True
print(7 in tup1) # 输出: False
# 比较运算符
print((1, 2) < (1, 3)) # 输出: True
print((1, 2, 3) == (1, 2, 3)) # 输出: True
6. 元组索引和截取
元组支持索引和切片操作:
tup = ('a', 'b', 'c', 'd', 'e')
# 索引
print(tup[0]) # 输出: 'a'
print(tup[-1]) # 输出: 'e'
# 切片 [start:end:step]
print(tup[1:3]) # 输出: ('b', 'c')
print(tup[:3]) # 输出: ('a', 'b', 'c')
print(tup[2:]) # 输出: ('c', 'd', 'e')
print(tup[::2]) # 输出: ('a', 'c', 'e')
print(tup[::-1]) # 输出: ('e', 'd', 'c', 'b', 'a') # 反转元组
7. 元组内置函数
Python提供了以下内置函数用于操作元组:
tup = (5, 2, 8, 1, 9)
# len() - 获取元组长度
print(len(tup)) # 输出: 5
# max() - 获取最大值
print(max(tup)) # 输出: 9
# min() - 获取最小值
print(min(tup)) # 输出: 1
# sum() - 求和(仅限数值元组)
print(sum(tup)) # 输出: 25
# tuple() - 将可迭代对象转换为元组
print(tuple([1, 2, 3])) # 输出: (1, 2, 3)
print(tuple("hello")) # 输出: ('h', 'e', 'l', 'l', 'o')
# sorted() - 返回排序后的列表(不是元组)
print(sorted(tup)) # 输出: [1, 2, 5, 8, 9]
# enumerate() - 返回枚举对象
for index, value in enumerate(tup):
print(index, value)
# any() - 检查是否有任何元素为True
print(any((0, False, 1))) # 输出: True
# all() - 检查是否所有元素都为True
print(all((1, True, 'a'))) # 输出: True
8. 元组的作用
元组在Python中有多种重要用途:
-
不可变性:保证数据不被意外修改
# 作为常量集合使用 COLORS = ('RED', 'GREEN', 'BLUE')
-
字典键:元组可以作为字典的键,而列表不行
location_map = {(35.6895, 139.6917): "Tokyo", (40.7128, -74.0060): "New York"}
-
函数参数和返回值:常用于函数返回多个值
def get_dimensions(): return 1920, 1080 width, height = get_dimensions()
-
性能优化:元组比列表更轻量,访问速度更快
# 创建元组比列表更快 %timeit (1, 2, 3) # 通常比 [1, 2, 3] 快
-
数据保护:确保数据在传递过程中不被修改
def process_data(data): # 确保传入的数据不会被修改 data_tuple = tuple(data) # 处理数据...
-
序列解包:方便地进行多重赋值
point = (10, 20) x, y = point
元组因其不可变性,在需要保证数据安全和稳定性的场景中非常有用,是Python中重要的数据结构之一。