1. 元组:Python中的不可变序列
元组(Tuple)是Python中一种基础但极其重要的数据结构。与列表类似,元组可以存储有序的元素集合,但关键区别在于元组一旦创建就不能修改。这种不可变性(immutability)特性使得元组在需要确保数据安全的场景中特别有价值。
1.1 元组的基本特性与创建
元组最显著的特点就是其不可变性。这意味着:
- 不能添加或删除元素
- 不能修改已有元素的值
- 不能对元组进行排序或反转等原地操作
创建元组的基本语法是使用圆括号:
python复制# 创建包含不同类型元素的元组
coordinates = (10, 20) # 坐标点
person = ('Alice', 25, 'Engineer') # 个人信息
mixed = (1, 'hello', 3.14, [4, 5]) # 混合类型
# 单元素元组需要加逗号
single_element = (42,) # 注意末尾的逗号
not_a_tuple = (42) # 这只是一个整数
在机器学习领域,元组常用于表示不可变的配置参数或数据形状。例如在TensorFlow中,张量的shape通常用元组表示:
python复制import tensorflow as tf
# 张量形状使用元组表示
tensor = tf.constant([[1, 2], [3, 4]])
print(tensor.shape) # 输出: (2, 2)
1.2 元组的操作与方法
虽然元组不可变,但仍支持多种操作:
索引和切片:
python复制my_tuple = ('P', 'y', 't', 'h', 'o', 'n')
# 索引访问
print(my_tuple[0]) # 'P'
print(my_tuple[-1]) # 'n'
# 切片操作
print(my_tuple[1:4]) # ('y', 't', 'h')
print(my_tuple[::2]) # ('P', 't', 'o')
元组解包:
python复制# 基本解包
point = (10, 20)
x, y = point
print(f"x: {x}, y: {y}")
# 星号解包
numbers = (1, 2, 3, 4, 5)
first, *middle, last = numbers
print(middle) # [2, 3, 4]
常用方法:
python复制my_tuple = (1, 2, 2, 3)
print(my_tuple.count(2)) # 2 (元素2出现的次数)
print(my_tuple.index(3)) # 3 (元素3首次出现的索引)
注意:虽然元组本身不可变,但如果元组包含可变对象(如列表),这些可变对象的内容是可以修改的。例如:
python复制mixed = (1, [2, 3], 4) mixed[1].append(5) # 可以修改元组中的列表 print(mixed) # (1, [2, 3, 5], 4)
1.3 元组在机器学习管道中的应用
在scikit-learn的Pipeline中,元组被用来固定操作名称和处理对象的组合:
python复制from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
# 管道中的每个步骤都是一个(名称, 转换器)的元组
pipeline = Pipeline([
('scaler', StandardScaler()), # 标准化步骤
('classifier', LogisticRegression()) # 分类器步骤
])
# 这种设计确保
