2026-10-21 16:06:22
Python元组是具有不可变性的有序数据集合,适合存储无需修改的数据,其核心操作包括创建、访问、解包等,高级用法涵盖namedtuple、字典键、函数返回多值等场景。
一、元组基础操作常规创建:my_tuple = (1, 'hello', 3.14)
单元素元组:必须加逗号,如single_element = (5,),否则会被视为普通变量。
索引访问:my_tuple[0]获取第一个元素。
切片操作:my_tuple[1:3]获取第2到第3个元素(左闭右开)。
列表是可变的(mutable),支持增删改操作(如append()、remove())。
元组是不可变的(immutable),创建后内容固定,无法通过索引修改或调用增删方法。
选元组:数据无需修改(如RGB值(255, 0, 0)、坐标(x, y)),需隐式保护数据完整性,或作为字典键、函数返回多值。
选列表:数据需频繁增删改(如购物车商品列表、待办事项清单),灵活性优先。
默认倾向:若无明确不可变需求,可优先使用列表,但需注意元组在迭代和字典键场景下的性能优势。
无法通过索引赋值修改元素,如my_tuple[0] = 'new_value'会报错TypeError。
无法调用append()、remove()等方法增删元素。
若元组包含可变对象(如列表),该对象内部状态可修改。
示例:t = ([1, 2], 3)t[0].append(4) # 修改元组中的列表,输出:([1, 2, 4], 3)# t[0] = [5, 6] # 替换元组元素会报错
本质:元组的不可变性指引用地址不可变,而非引用对象的状态不可变。
函数通过元组打包返回多个值,解包时直接赋值给变量。
示例:def get_user_info(): return "Alice", 30, "New York" # 实际返回元组name, age, city = get_user_info()
简洁交换变量值:a, b = b, a(背后依赖元组打包解包)。
通过collections.namedtuple创建带字段名的元组子类,解决索引访问可读性差的问题。
示例:from collections import namedtuplePoint = namedtuple('Point', ['x', 'y'])p = Point(10, 20)print(p.x) # 通过字段名访问
元组不可变且可哈希,适合作为字典键(列表不可变故不能作为键)。
示例:my_dict = {(1, 2): 'value'}。
zip():将多个可迭代对象对应元素打包为元组。
enumerate():将可迭代对象索引和值打包为(index, value)元组。
示例:list1 = [1, 2]; list2 = ['a', 'b']zipped = list(zip(list1, list2)) # 输出:[(1, 'a'), (2, 'b')]enumerated = list(enumerate(['x', 'y'])) # 输出:[(0, 'x'), (1, 'y')]