AI 入门必备:Python 数据类型+列表/字典(实战案例:处理AI数据集)
本文为《Python+AI 零基础入门到实战》系列第2篇,承接上一篇的Anaconda环境配置,全程聚焦AI开发90%场景都会用到的Python核心语法,不讲无用的纯理论,所有知识点都绑定AI数据集处理实战,零基础也能跟着跑通代码,学完就能直接用在AI项目中。关注我,持续更新全系列AI入门实战内容。
前言
上一篇我们已经100%完成了Python+AI的开发环境搭建,很多新手接下来会陷入一个误区:抱着Python语法书从头啃到尾,学了大量和AI开发无关的语法,等到真正处理AI数据集、写模型代码的时候,还是一脸懵。
AI开发的核心是「数据处理」,而数据类型、列表、字典,就是AI数据处理的底层基石。
- 你后续接触的所有AI数据集,无论是表格数据、文本语料、图像像素,最终都会拆解成基础数据类型,用列表/字典进行存储和处理
- 90%的AI数据预处理工作,本质上就是对列表、字典的增删改查、遍历、筛选
- 机器学习的标签、特征值,深度学习的张量、模型超参数,底层都依赖本文要讲的核心知识点
本文只讲AI开发高频用到的内容,每一个知识点都配套AI场景案例,学完就能上手处理经典AI数据集。
一、AI开发必学:Python核心基础数据类型
Python的数据类型有很多,但AI开发中99%的场景,只会用到以下4种核心类型,我们完全围绕AI场景讲解,零基础也能秒懂。
前置说明
本文所有代码,都可以在上一篇我们搭建好的ai_learn虚拟环境的Jupyter Notebook中直接运行,无需额外配置。
打开方式:
- 打开Anaconda Prompt,执行
conda activate ai_learn激活环境 - 执行
jupyter notebook启动编辑器,新建Python文件即可编写代码
1. 数值型:int(整数)、float(浮点数)
这是AI数据集中最核心、最基础的类型,几乎所有的特征值、标签都由这两种类型构成。
核心定义&AI场景用途
| 类型 | 定义 | AI开发核心用途 |
|---|---|---|
| int | 整数,无小数点,如 0、1、2、-3 | 分类任务的样本标签(比如0代表猫、1代表狗、2代表鸟)、模型训练的轮次、批次大小batch_size、图像的像素长宽 |
| float | 带小数点的数值,如 3.14、0.5、-2.8 | 数据集的特征值(比如鸢尾花的花萼长度、花瓣宽度)、归一化后的图像像素值(0-1之间)、模型的学习率、损失值、准确率等指标 |
代码示例(AI场景专属)
# 1. int类型:分类任务的标签定义
label_cat = 0 # 猫的标签为0
label_dog = 1 # 狗的标签为1
label_bird = 2 # 鸟的标签为2
print("分类标签类型:", type(label_cat))
print("猫的标签:", label_cat)
# 2. float类型:AI数据集的特征值
# 鸢尾花样本的特征:花萼长度、花萼宽度、花瓣长度、花瓣宽度
sepal_length = 5.1
sepal_width = 3.5
petal_length = 1.4
petal_width = 0.2
print("特征值类型:", type(sepal_length))
print("鸢尾花样本特征:", sepal_length, sepal_width, petal_length, petal_width)
# 3. float类型:模型超参数&训练指标
learning_rate = 0.001 # 模型学习率
train_accuracy = 0.923 # 训练准确率
print("模型学习率:", learning_rate, "训练准确率:", train_accuracy)
运行结果
分类标签类型: <class 'int'>
猫的标签: 0
特征值类型: <class 'float'>
鸢尾花样本特征: 5.1 3.5 1.4 0.2
模型学习率: 0.001 训练准确率: 0.923
2. 字符串(str)
文本AI任务的核心类型,同时也用于存储数据集的特征名、样本类别名称、文件路径等。
核心定义&AI场景用途
- 定义:用单引号/双引号包裹的文本内容,如
"iris"、"花萼长度"、"我喜欢AI" - AI开发核心用途:
- 文本分类、情感分析等NLP任务的语料数据
- 数据集的特征名称、样本类别名称(如
"山鸢尾"、"变色鸢尾") - 数据集文件、模型文件的读取/保存路径
- 模型训练的日志输出、结果标注
代码示例(AI场景专属)
# 1. 字符串:数据集类别名称
class_name1 = "山鸢尾"
class_name2 = "变色鸢尾"
class_name3 = "维吉尼亚鸢尾"
print("样本类别:", class_name1, class_name2, class_name3)
# 2. 字符串:文本AI任务的语料数据
text1 = "这个产品太好用了,强烈推荐!" # 正面情感语料
text2 = "踩坑了,这个东西完全不好用" # 负面情感语料
print("正面语料:", text1)
print("负面语料:", text2)
# 3. 字符串:数据集文件路径
dataset_path = "./data/iris.csv"
print("数据集路径:", dataset_path)
3. 布尔型(bool)
只有两个取值:True(真)、False(假),核心用于AI数据的筛选、条件判断、模型结果的正误标记。
代码示例(AI场景专属)
# 1. 布尔型:判断模型预测结果是否正确
predict_label = 0 # 模型预测的标签
true_label = 0 # 样本真实标签
is_correct = (predict_label == true_label)
print("模型预测是否正确:", is_correct)
# 2. 布尔型:数据筛选条件
# 筛选花萼长度大于5.0的样本
sepal_length = 5.1
is_gt_5 = sepal_length > 5.0
print("该样本花萼长度是否大于5.0:", is_gt_5)
二、AI数据处理核心:Python列表(List)
列表是AI开发中使用频率最高的数据结构,没有之一。你后续接触的所有数据集,本质上都是由列表嵌套构成的。
核心定义&AI场景用途
- 定义:用中括号
[]包裹,元素之间用逗号分隔,可存储任意类型的数据,支持动态增删改查,有序、可重复。 - AI开发核心用途:
- 存储整个数据集的所有样本特征、所有样本标签
- 存储单个样本的多维度特征(比如鸢尾花的4个特征,就可以存在一个列表里)
- 存储模型训练过程中的损失值、准确率变化,用于后续绘制训练曲线
- 存储图像的像素矩阵、文本分词后的词语序列
1. 列表的基础定义(AI场景示例)
# 1. 单个样本的特征列表:鸢尾花的4个特征值
sample_feature = [5.1, 3.5, 1.4, 0.2]
print("单个样本特征:", sample_feature)
print("特征列表类型:", type(sample_feature))
# 2. 数据集的标签列表:所有样本的分类标签
dataset_label = [0, 0, 1, 1, 2, 2]
print("数据集标签列表:", dataset_label)
# 3. 嵌套列表:整个数据集的特征集(最常用!)
# 每一个子列表,代表一个样本的特征
dataset_feature = [
[5.1, 3.5, 1.4, 0.2],
[4.9, 3.0, 1.4, 0.2],
[6.2, 3.4, 5.4, 2.3],
[5.9, 3.0, 5.1, 1.8]
]
print("数据集特征集:", dataset_feature)
print("数据集样本数量:", len(dataset_feature)) # len()获取列表长度,即样本数量
2. AI场景高频操作1:列表索引与切片
索引和切片是从数据集中提取指定样本、指定特征的核心操作,90%的数据提取都靠这个。
核心规则
- 索引:从0开始计数,
列表[索引值]提取单个元素,支持负数索引(-1代表最后一个元素) - 切片:
列表[起始索引:结束索引:步长],提取多个元素,左闭右开(包含起始索引,不包含结束索引)
代码示例(AI数据集场景)
# 先定义一个完整的特征数据集
dataset_feature = [
[5.1, 3.5, 1.4, 0.2], # 索引0:第1个样本
[4.9, 3.0, 1.4, 0.2], # 索引1:第2个样本
[6.2, 3.4, 5.4, 2.3], # 索引2:第3个样本
[5.9, 3.0, 5.1, 1.8] # 索引3:第4个样本
]
# 1. 索引:提取单个样本
print("第1个样本:", dataset_feature[0])
print("最后1个样本:", dataset_feature[-1])
# 2. 索引嵌套:提取单个样本的指定特征
# 提取第1个样本的第1个特征(花萼长度)
print("第1个样本的花萼长度:", dataset_feature[0][0])
# 提取第3个样本的第3个特征(花瓣长度)
print("第3个样本的花瓣长度:", dataset_feature[2][2])
# 3. 切片:提取数据集的前N个样本(AI中常用作训练集)
print("前2个样本(训练集):", dataset_feature[0:2])
print("前3个样本:", dataset_feature[:3]) # 起始索引为0可省略
# 4. 切片:提取数据集的后N个样本(AI中常用作测试集)
print("后2个样本(测试集):", dataset_feature[-2:])
# 5. 切片:步长操作,隔一个样本取一个
print("隔行提取样本:", dataset_feature[::2])
3. AI场景高频操作2:列表的增删改
AI数据处理中,经常需要新增样本、修改异常特征值、删除无效样本,这些都依赖列表的增删改操作。
代码示例(AI数据集场景)
# 初始化样本特征列表
sample_list = [[5.1, 3.5, 1.4, 0.2], [4.9, 3.0, 1.4, 0.2]]
print("初始样本列表:", sample_list)
# 1. 新增:向数据集中添加新样本(append,最常用)
new_sample = [6.2, 3.4, 5.4, 2.3]
sample_list.append(new_sample)
print("添加新样本后:", sample_list)
# 2. 修改:修正样本的异常特征值
# 把第1个样本的花萼长度5.1,修正为5.2
sample_list[0][0] = 5.2
print("修改特征值后:", sample_list)
# 3. 删除:移除数据集中的无效样本
# 删除索引为1的样本
del sample_list[1]
print("删除无效样本后:", sample_list)
4. AI场景高频操作3:列表遍历与批量处理
AI数据集往往有几百、几千甚至上万个样本,不可能手动一个个处理,必须通过遍历实现批量处理,这是数据预处理的核心技能。
代码示例(AI数据集批量处理)
# 定义鸢尾花数据集特征集
dataset_feature = [
[5.1, 3.5, 1.4, 0.2],
[4.9, 3.0, 1.4, 0.2],
[6.2, 3.4, 5.4, 2.3],
[5.9, 3.0, 5.1, 1.8]
]
# 1. 基础遍历:打印数据集中的每一个样本
print("数据集所有样本:")
for sample in dataset_feature:
print("样本特征:", sample)
# 2. 进阶遍历:批量提取所有样本的花瓣长度(第3个特征,索引2)
petal_length_list = []
for sample in dataset_feature:
petal_length = sample[2] # 提取每个样本的花瓣长度
petal_length_list.append(petal_length) # 添加到新列表
print("所有样本的花瓣长度:", petal_length_list)
# 3. 实战遍历:批量计算特征均值(AI数据统计常用)
total = 0
for length in petal_length_list:
total += length
mean_length = total / len(petal_length_list)
print("花瓣长度的均值:", mean_length)
三、AI数据处理核心:Python字典(Dict)
字典是AI开发中仅次于列表的核心数据结构,核心解决「数据有明确的名称和对应值」的场景,让数据处理更清晰、更不易出错。
核心定义&AI场景用途
- 定义:用大括号
{}包裹,以键:值(key:value)的形式存储数据,键必须是唯一的、不可变的(字符串、数值型),值可以是任意类型。 - AI开发核心用途:
- 存储单个样本的「特征名:特征值」,避免用列表时忘记索引对应的特征含义
- 存储模型的超参数配置(如
{"learning_rate":0.001, "batch_size":32}) - 存储数据集的元信息(如样本数量、特征数量、类别数量)
- 存储模型的预测结果,包含「样本ID、真实标签、预测标签、置信度」等完整信息
1. 字典的基础定义(AI场景示例)
# 1. 单个样本的字典存储:特征名+特征值,清晰明了
# 再也不用记索引0对应花萼长度,直接通过特征名就能提取
iris_sample = {
"花萼长度": 5.1,
"花萼宽度": 3.5,
"花瓣长度": 1.4,
"花瓣宽度": 0.2,
"样本类别": "山鸢尾",
"标签": 0
}
print("鸢尾花样本字典:", iris_sample)
print("样本字典类型:", type(iris_sample))
# 2. 模型超参数字典(AI训练必用)
model_hyperparams = {
"learning_rate": 0.001, # 学习率
"batch_size": 32, # 批次大小
"epoch": 100, # 训练轮次
"optimizer": "Adam", # 优化器
"loss_function": "cross_entropy" # 损失函数
}
print("模型超参数:", model_hyperparams)
# 3. 数据集元信息字典
dataset_info = {
"样本总数": 150,
"特征数量": 4,
"类别数量": 3,
"数据集名称": "鸢尾花数据集",
"特征名称": ["花萼长度", "花萼宽度", "花瓣长度", "花瓣宽度"]
}
print("数据集元信息:", dataset_info)
2. AI场景高频操作1:字典的键值对访问
字典的核心优势,就是通过键名直接访问对应的值,无需记索引,代码可读性拉满,也不会出现特征对应错误的问题。
代码示例(AI场景)
# 定义样本字典
iris_sample = {
"花萼长度": 5.1,
"花萼宽度": 3.5,
"花瓣长度": 1.4,
"花瓣宽度": 0.2,
"样本类别": "山鸢尾",
"标签": 0
}
# 1. 直接通过键名访问值(最常用)
print("样本的花萼长度:", iris_sample["花萼长度"])
print("样本的标签:", iris_sample["标签"])
print("样本的类别:", iris_sample["样本类别"])
# 2. get()方法访问(避坑专用!)
# 键名不存在时,不会报错,会返回默认值
print("样本的花瓣长度:", iris_sample.get("花瓣长度", 0))
# 键名不存在,返回默认值"未知",不会报错
print("样本的不存在的特征:", iris_sample.get("花萼高度", "未知"))
3. AI场景高频操作2:字典的增删改
AI开发中,经常需要给样本新增特征、修改超参数、删除无效的键值对,这些都依赖字典的增删改操作。
代码示例(AI场景)
# 定义模型超参数字典
model_hyperparams = {
"learning_rate": 0.001,
"batch_size": 32,
"epoch": 100
}
print("初始超参数:", model_hyperparams)
# 1. 新增:添加新的超参数键值对
model_hyperparams["optimizer"] = "Adam"
model_hyperparams["dropout"] = 0.2
print("新增超参数后:", model_hyperparams)
# 2. 修改:调整超参数的值(调参必用)
model_hyperparams["learning_rate"] = 0.0001 # 调小学习率
model_hyperparams["epoch"] = 200 # 增加训练轮次
print("修改超参数后:", model_hyperparams)
# 3. 删除:移除不需要的超参数
del model_hyperparams["dropout"]
print("删除超参数后:", model_hyperparams)
4. AI场景高频操作3:字典的遍历
常用于批量读取超参数、批量处理样本的所有特征、批量统计数据集信息。
代码示例(AI场景)
# 模型超参数字典
model_hyperparams = {
"learning_rate": 0.001,
"batch_size": 32,
"epoch": 100,
"optimizer": "Adam"
}
# 1. 遍历所有键值对(最常用)
print("模型完整超参数:")
for key, value in model_hyperparams.items():
print(f"{key}: {value}")
# 2. 遍历所有键名
print("超参数名称:", list(model_hyperparams.keys()))
# 3. 遍历所有值
print("超参数取值:", list(model_hyperparams.values()))
四、核心实战:用列表+字典处理经典AI鸢尾花数据集
前面的知识点都是拆分讲解,现在我们用一个完整的实战案例,把所有知识点串联起来,模拟AI开发中最常见的数据集处理流程,零基础也能跟着跑通。
实战目标
- 用字典存储单个样本的完整信息
- 用列表存储整个数据集的所有样本
- 实现数据集的筛选、特征提取、统计分析
- 完成AI训练前的基础数据预处理
完整实战代码(可直接复制运行)
# ===================== 1. 构建鸢尾花数据集 =====================
# 用列表存储整个数据集,每个元素是一个字典,代表一个完整样本
iris_dataset = [
{"花萼长度": 5.1, "花萼宽度": 3.5, "花瓣长度": 1.4, "花瓣宽度": 0.2, "类别": "山鸢尾", "标签": 0},
{"花萼长度": 4.9, "花萼宽度": 3.0, "花瓣长度": 1.4, "花瓣宽度": 0.2, "类别": "山鸢尾", "标签": 0},
{"花萼长度": 7.0, "花萼宽度": 3.2, "花瓣长度": 4.7, "花瓣宽度": 1.4, "类别": "变色鸢尾", "标签": 1},
{"花萼长度": 6.4, "花萼宽度": 3.2, "花瓣长度": 4.5, "花瓣宽度": 1.5, "类别": "变色鸢尾", "标签": 1},
{"花萼长度": 6.3, "花萼宽度": 3.3, "花瓣长度": 6.0, "花瓣宽度": 2.5, "类别": "维吉尼亚鸢尾", "标签": 2},
{"花萼长度": 5.8, "花萼宽度": 2.7, "花瓣长度": 5.1, "花瓣宽度": 1.9, "类别": "维吉尼亚鸢尾", "标签": 2}
]
print("数据集总样本数:", len(iris_dataset))
print("="*50)
# ===================== 2. 数据集基础信息提取 =====================
# 提取所有样本的标签列表(AI模型训练必备)
label_list = []
# 提取所有样本的特征矩阵(AI模型训练必备)
feature_matrix = []
# 特征名称列表
feature_names = ["花萼长度", "花萼宽度", "花瓣长度", "花瓣宽度"]
for sample in iris_dataset:
# 提取标签
label_list.append(sample["标签"])
# 提取特征,按顺序存入列表,构成特征矩阵
sample_feature = [sample[name] for name in feature_names]
feature_matrix.append(sample_feature)
print("数据集标签列表:", label_list)
print("数据集特征矩阵:")
for feature in feature_matrix:
print(feature)
print("="*50)
# ===================== 3. 数据集筛选(AI数据预处理高频操作) =====================
# 筛选出所有"山鸢尾"类别的样本
setosa_samples = [sample for sample in iris_dataset if sample["类别"] == "山鸢尾"]
print("山鸢尾样本数量:", len(setosa_samples))
print("山鸢尾样本:", setosa_samples)
# 筛选出花瓣长度大于4.0的样本(筛选有效特征样本)
long_petal_samples = [sample for sample in iris_dataset if sample["花瓣长度"] > 4.0]
print("\n花瓣长度大于4.0的样本数量:", len(long_petal_samples))
print("符合条件的样本:", long_petal_samples)
print("="*50)
# ===================== 4. 数据集统计分析(AI数据探索必备) =====================
# 计算所有样本的花萼长度均值
sepal_length_total = 0
for sample in iris_dataset:
sepal_length_total += sample["花萼长度"]
sepal_length_mean = sepal_length_total / len(iris_dataset)
print("所有样本花萼长度均值:", round(sepal_length_mean, 2))
# 统计每个类别的样本数量
class_count = {}
for sample in iris_dataset:
class_name = sample["类别"]
if class_name in class_count:
class_count[class_name] += 1
else:
class_count[class_name] = 1
print("每个类别的样本数量:", class_count)
运行结果
数据集总样本数: 6
==================================================
数据集标签列表: [0, 0, 1, 1, 2, 2]
数据集特征矩阵:
[5.1, 3.5, 1.4, 0.2]
[4.9, 3.0, 1.4, 0.2]
[7.0, 3.2, 4.7, 1.4]
[6.4, 3.2, 4.5, 1.5]
[6.3, 3.3, 6.0, 2.5]
[5.8, 2.7, 5.1, 1.9]
==================================================
山鸢尾样本数量: 2
山鸢尾样本: [{'花萼长度': 5.1, '花萼宽度': 3.5, '花瓣长度': 1.4, '花瓣宽度': 0.2, '类别': '山鸢尾', '标签': 0}, {'花萼长度': 4.9, '花萼宽度': 3.0, '花瓣长度': 1.4, '花瓣宽度': 0.2, '类别': '山鸢尾', '标签': 0}]
花瓣长度大于4.0的样本数量: 4
符合条件的样本: [{'花萼长度': 7.0, '花萼宽度': 3.2, '花瓣长度': 4.7, '花瓣宽度': 1.4, '类别': '变色鸢尾', '标签': 1}, {'花萼长度': 6.4, '花萼宽度': 3.2, '花瓣长度': 4.5, '花瓣宽度': 1.5, '类别': '变色鸢尾', '标签': 1}, {'花萼长度': 6.3, '花萼宽度': 3.3, '花瓣长度': 6.0, '花瓣宽度': 2.5, '类别': '维吉尼亚鸢尾', '标签': 2}, {'花萼长度': 5.8, '花萼宽度': 2.7, '花瓣长度': 5.1, '花瓣宽度': 1.9, '类别': '维吉尼亚鸢尾', '标签': 2}]
==================================================
所有样本花萼长度均值: 5.92
每个类别的样本数量: {'山鸢尾': 2, '变色鸢尾': 2, '维吉尼亚鸢尾': 2}
五、新手高频避坑指南(AI数据处理90%的报错都在这里)
1. 列表索引越界报错
- 报错示例:
IndexError: list index out of range - 报错原因:提取列表元素时,索引值超过了列表的最大长度,比如列表只有4个样本(索引0-3),却去取
dataset[4] - AI场景避坑:提取样本前,先用
len(dataset)查看列表长度,确认索引范围;切片操作不会触发这个报错,优先用切片提取批量样本
2. 字典键名不存在报错
- 报错示例:
KeyError: '花萼高度' - 报错原因:访问字典时,键名打错、或者不存在,这是新手处理AI数据时最常踩的坑
- AI场景避坑:优先用
字典.get(键名, 默认值)的方式访问,键名不存在时不会报错,只会返回默认值,代码稳定性拉满
3. 列表遍历过程中修改列表,导致数据错乱
- 报错场景:遍历数据集的列表时,直接删除里面的无效样本,导致后续样本的索引发生变化,部分样本被跳过
- 避坑方案:新建一个空列表,把符合条件的有效样本添加进去,而不是在原列表中直接删除
- 正确代码示例:
# 正确做法:新建列表存储有效样本 valid_samples = [] for sample in iris_dataset: if sample["花瓣长度"] > 0: # 筛选有效样本 valid_samples.append(sample)
4. 数据类型不匹配报错
- 报错示例:
TypeError: can only concatenate str (not "int") to str - 报错原因:AI数据集中,特征值的类型混乱,比如把字符串类型的数字和数值型数字做计算
- AI场景避坑:处理特征值时,先用
type()查看数据类型,用int()/float()做类型转换,确保计算的数值都是同一类型
结尾&系列预告
恭喜你!学完本文,你已经掌握了AI数据处理中90%场景都会用到的Python核心技能,从基础数据类型,到列表、字典的全场景操作,再到完整的数据集处理实战,已经具备了AI数据预处理的基础能力。
本文是《Python+AI 零基础入门到实战》系列的第2篇,下一篇我们将讲解《AI 计算基础:Python 函数+循环(实战:写一个简单的数据集清洗脚本)》,带你把零散的操作封装成可复用的函数,写出更规范、更高效的AI数据处理代码,真正实现从零基础到实战的进阶。
关注我,持续更新Python+AI零基础到实战全流程内容,保姆级教学,全程避坑不迷路!
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)