本文目录导读:

我来详细介绍Python元组的创建和使用案例。
元组的创建
基本创建方式
# 方式1:使用小括号 t1 = (1, 2, 3, 4, 5) print(t1) # (1, 2, 3, 4, 5) # 方式2:使用tuple()函数 t2 = tuple([1, 2, 3, 4, 5]) print(t2) # (1, 2, 3, 4, 5) # 方式3:创建单个元素的元组(注意逗号) t3 = (1,) # 这是一个元组 t4 = (1) # 这是一个整数 print(type(t3)) # <class 'tuple'> print(type(t4)) # <class 'int'> # 方式4:省略括号(只有在明确是元组时才能省略) t5 = 1, 2, 3, 4, 5 print(t5) # (1, 2, 3, 4, 5)
创建混合类型元组
# 元组可以包含不同类型的数据 mixed_tuple = (1, "Hello", 3.14, True, [1, 2, 3]) print(mixed_tuple) # (1, 'Hello', 3.14, True, [1, 2, 3])
元组的访问
索引访问
fruits = ('apple', 'banana', 'orange', 'grape', 'watermelon')
# 正向索引
print(fruits[0]) # apple
print(fruits[2]) # orange
# 反向索引
print(fruits[-1]) # watermelon
print(fruits[-2]) # grape
切片操作
numbers = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) # 基本切片 print(numbers[2:5]) # (2, 3, 4) print(numbers[:4]) # (0, 1, 2, 3) print(numbers[6:]) # (6, 7, 8, 9) # 步长切片 print(numbers[::2]) # (0, 2, 4, 6, 8) print(numbers[1::2]) # (1, 3, 5, 7, 9) print(numbers[::-1]) # (9, 8, 7, 6, 5, 4, 3, 2, 1, 0)
元组的常用操作
基本操作
# 拼接元组 t1 = (1, 2, 3) t2 = (4, 5, 6) t3 = t1 + t2 print(t3) # (1, 2, 3, 4, 5, 6) # 重复元组 t4 = t1 * 3 print(t4) # (1, 2, 3, 1, 2, 3, 1, 2, 3) # 检查元素是否存在 print(2 in t1) # True print(10 in t1) # False # 获取长度 print(len(t1)) # 3
元组方法
numbers = (1, 3, 5, 3, 7, 3, 9, 3)
# count() - 统计元素出现次数
count_3 = numbers.count(3)
print(f"3出现了{count_3}次") # 3出现了4次
# index() - 查找元素索引
index_5 = numbers.index(5)
print(f"5的索引是{index_5}") # 5的索引是2
# 指定范围查找
index_7 = numbers.index(7, 4, 8) # 在索引4-8区间查找7
print(f"7的索引是{index_7}") # 7的索引是4
元组的实际应用案例
案例1:函数多返回值
def get_student_info():
"""返回学生的基本信息"""
name = "张三"
age = 20
grade = "大二"
return name, age, grade # 返回元组
# 接收返回值
student = get_student_info()
print(f"学生信息:{student}") # 学生信息:('张三', 20, '大二')
# 解包元组
name, age, grade = get_student_info()
print(f"姓名:{name},年龄:{age},年级:{grade}")
案例2:坐标系统
# 使用元组表示坐标点
points = [
(0, 0), # 原点
(3, 4), # 点A
(-2, 5), # 点B
(1, -3) # 点C
]
def calculate_distance(point1, point2):
"""计算两点之间的距离"""
x1, y1 = point1
x2, y2 = point2
distance = ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** 0.5
return distance
# 计算点A到原点的距离
distance = calculate_distance(points[1], points[0])
print(f"点A到原点的距离:{distance:.2f}") # 点A到原点的距离:5.00
案例3:数据记录
# 使用元组作为不可变记录
employees = [
("EMP001", "张三", 8000, "技术部"),
("EMP002", "李四", 9000, "市场部"),
("EMP003", "王五", 7500, "技术部"),
("EMP004", "赵六", 8500, "人事部")
]
# 查找特定部门的员工
def find_employees_by_department(employees, department):
"""按部门查找员工"""
result = []
for emp in employees:
emp_id, name, salary, dept = emp
if dept == department:
result.append(emp)
return result
tech_employees = find_employees_by_department(employees, "技术部")
print("技术部员工:")
for emp in tech_employees:
print(f" 工号:{emp[0]},姓名:{emp[1]},薪资:{emp[2]}")
案例4:字典中的元组作为键
# 元组可以作为字典的键(列表不行)
city_population = {
(39.9042, 116.4074): "北京",
(31.2304, 121.4737): "上海",
(23.1291, 113.2644): "广州"
}
# 查找城市
coordinate = (31.2304, 121.4737)
if coordinate in city_population:
print(f"坐标{coordinate}对应的城市是:{city_population[coordinate]}")
案例5:数据不可变性的应用
# 使用元组存储配置信息
DATABASE_CONFIG = (
"localhost", # 主机名
3306, # 端口号
"my_database", # 数据库名
"root", # 用户名
"password123" # 密码
)
def connect_to_database(config):
"""连接数据库(模拟)"""
host, port, db_name, user, password = config
print(f"正在连接数据库...")
print(f"主机:{host}")
print(f"端口:{port}")
print(f"数据库:{db_name}")
print(f"用户:{user}")
print("连接成功!")
# 尝试修改配置(会出错)
# DATABASE_CONFIG[0] = "new_host" # TypeError: 'tuple' object does not support item assignment
connect_to_database(DATABASE_CONFIG)
元组 vs 列表
# 性能比较
import time
# 创建大量数据
data_size = 10000000
# 测试列表创建
start = time.time()
list_data = list(range(data_size))
list_time = time.time() - start
print(f"列表创建时间:{list_time:.3f}秒")
# 测试元组创建
start = time.time()
tuple_data = tuple(range(data_size))
tuple_time = time.time() - start
print(f"元组创建时间:{tuple_time:.3f}秒")
# 测试访问速度
start = time.time()
for i in range(1000000):
_ = list_data[i]
list_access_time = time.time() - start
start = time.time()
for i in range(1000000):
_ = tuple_data[i]
tuple_access_time = time.time() - start
print(f"列表访问时间:{list_access_time:.3f}秒")
print(f"元组访问时间:{tuple_access_time:.3f}秒")
元组的主要特点:
- 不可变性:创建后不能修改
- 有序性:可以通过索引访问
- 可嵌套:可以包含其他元组
- 可哈希:可以作为字典的键
适用场景:
- 存储不应修改的数据
- 函数返回多个值
- 作为字典的键
- 需要更高性能的只读数据集合