Python 数据类型:LLM 语料与 API 参数的底层处理逻辑

AgenticCoding·十二月创作之星挑战赛 10w+人浏览 493人参与

专栏:Python 从真零基础到纯文本 LLM 全栈实战・第 2 篇 | 字数:9600 字左右| 零基础友好・全函数覆盖・LLM 实战绑定


开篇:数据类型 = LLM 的「快递箱」

1.1 为什么要学习 Python 数据类型?

零基础小白来说,Python 数据类型就像给 LLM(大语言模型)装东西的「快递箱」

  • 单条用户提问→用「字符串」装(单个快递盒)
  • 批量语料→用「列表 / 元组」装(大纸箱)
  • LLM API 请求参数→用「字典」装(带格子的结构化箱子)
  • 去重后的语料→用「集合」装(过滤重复的箱子)

LLM 的所有语料预处理、API 调用、结果解析全靠数据类型实现 —— 这篇文章将100% 覆盖 Python 核心 5 大数据类型的所有函数 / 方法,用「快递箱」类比讲透,最后绑定 LLM 实战场景。

1.2 学习约定

  • 零基础友好:所有术语用「快递箱」类比,无任何专业黑话
  • 全方法覆盖:列出字符串、列表、字典、元组、集合的所有官方函数 / 方法,无遗漏
  • LLM 绑定:每个方法都标注「LLM 应用场景」
  • 代码示例:所有示例可直接运行,复制即可用于 LLM 开发

一、字符串(str):LLM 的「单条文本快递盒」

字符串是用于存储文本的数据类型,是 LLM 开发中最常用的数据类型—— 所有的 Prompt、用户提问、LLM 回答都是字符串。

1.1 字符串的定义

# 单引号定义
str1 = 'Hello LLM'
# 双引号定义
str2 = "Hello LLM"
# 多行字符串(用于LLM长Prompt)
str3 = """
你是电商客服,仅回答商品相关问题
要求:简洁明了,不超过20字
"""

1.2 字符串的核心方法(全列表 + LLM 场景)

1.2.1 字符串索引与切片(快递盒的「取件方式」)
# 索引:取单个字符(从0开始,-1表示最后一个)
s = "Hello LLM"
s[0]  # 输出:H
s[-1] # 输出:M

# 切片:取一段字符(左闭右开)
s[0:5]    # 输出:Hello
s[6:]     # 输出:LLM
s[:-2]    # 输出:Hello L
s[::2]    # 输出:HloLM(步长为2)

# LLM场景:提取LLM回答的前100字符
llm_response = "这是LLM的长回答..."
short_response = llm_response[:100]
1.2.2 字符串拼接与格式化(快递盒的「打包方式」)
方法语法LLM 场景
+ 拼接s1 + s2简单拼接 LLM Prompt
f-stringf"{s1} {s2}"动态生成 LLM Prompt(推荐)
str.format()"{0} {1}".format(s1, s2)兼容旧 Python 版本
% 格式化"%s %s" % (s1, s2)兼容 Python 2
# LLM场景:f-string动态生成Prompt
product = "苹果15手机壳"
user_question = "发货时间"
prompt = f"帮我查询{product}的{user_question}"
print(prompt)  # 输出:帮我查询苹果15手机壳的发货时间
1.2.3 字符串修改(快递盒的「包装调整」)
方法功能LLM 场景
str.upper()转换为大写LLM 语料统一大小写
str.lower()转换为小写LLM 语料统一大小写
str.title()每个单词首字母大写格式化 LLM 生成的标题
str.strip()删除开头 / 结尾的空白字符(空格 / 换行 / 制表符)LLM 语料清洗
str.lstrip()删除开头的空白字符LLM 语料清洗
str.rstrip()删除结尾的空白字符LLM 语料清洗
str.replace(old, new, count)替换字符 / 字符串,count 为替换次数LLM 语料去敏感词
str.split(sep, maxsplit)按分隔符拆分字符串,返回列表LLM 语料拆分
str.rsplit(sep, maxsplit)从右侧开始拆分LLM 日志拆分
str.join(iterable)将可迭代对象连接为字符串LLM 语料拼接
str.zfill(width)左侧补零到指定宽度格式化 LLM 语料的编号
str.capitalize()首字母大写,其余小写格式化 LLM 生成的句子
# LLM场景:语料清洗
raw_corpus = "   苹果15手机壳 质量很好\n"
clean_corpus = raw_corpus.strip().replace(" ", "").lower()
print(clean_corpus)  # 输出:苹果15手机壳质量很好
1.2.4 字符串判断(快递盒的「内容检查」)
方法功能LLM 场景
str.isalpha()是否全是字母检查 LLM 语料是否为纯文本
str.isdigit()是否全是数字检查 LLM 语料是否为纯数字
str.isalnum()是否全是字母或数字检查 LLM 语料是否为合法 ID
str.isspace()是否全是空白字符检查 LLM 语料是否为空行
str.startswith(prefix, start, end)是否以指定字符串开头检查 LLM 日志是否为 ERROR
str.endswith(suffix, start, end)是否以指定字符串结尾检查 LLM 语料是否为.md 文件
str.contains()是否包含指定字符串检查 LLM 语料是否包含敏感词(需导入 re 模块)
# LLM场景:检查语料是否为空行
for line in open("llm_corpus.txt"):
    if line.isspace():
        continue  # 跳过空行
    process(line)

二、列表(list):LLM 的「批量语料大纸箱」

列表是用于存储多个数据的可变容器,用[]包裹,是 LLM 开发中批量处理语料的核心工具—— 所有的批量评论、对话历史、语料库都是列表。

2.1 列表的定义

# 空列表
list1 = []
# 包含不同类型元素的列表
list2 = ["apple", "banana", 123, True]
# LLM语料列表
llm_corpus = ["苹果15手机壳质量很好", "华为Mate60手机壳不错", "小米14手机壳一般"]

2.2 列表的核心方法(全列表 + LLM 场景)

2.2.1 列表的增删改查(大纸箱的「存取操作」)
增(添加语料)
方法功能LLM 场景
list.append(x)在列表末尾添加元素 x动态添加 LLM 语料
list.insert(index, x)在指定位置 index 添加元素 x在指定位置插入 LLM 语料
list.extend(iterable)将可迭代对象的元素添加到列表末尾合并多个 LLM 语料列表
# LLM场景:动态添加语料
llm_corpus = ["苹果15手机壳质量很好"]
llm_corpus.append("华为Mate60手机壳不错")  # 添加单个语料
llm_corpus.extend(["小米14手机壳一般", "OPPO Find X7手机壳挺好"])  # 合并语料
print(llm_corpus)  # 输出:["苹果15...", "华为...", "小米...", "OPPO..."]
删(删除语料)
方法功能LLM 场景
list.remove(x)删除第一个出现的元素 x删除 LLM 语料中的敏感内容
list.pop(index)删除并返回指定位置的元素,默认删除最后一个批量删除 LLM 语料的最后一条
list.clear()清空列表清空 LLM 对话历史
del list[index]删除指定位置的元素删除 LLM 语料的指定条目
# LLM场景:删除敏感语料
llm_corpus = ["苹果15手机壳质量很好", "华为Mate60手机壳垃圾", "小米14手机壳一般"]
llm_corpus.remove("华为Mate60手机壳垃圾")  # 删除敏感语料
print(llm_corpus)  # 输出:["苹果15...", "小米14..."]
改(修改语料)
# 直接通过索引修改
llm_corpus[0] = "苹果15手机壳质量非常好"
查(查找语料)
# 通过索引查找
print(llm_corpus[0])  # 输出:苹果15手机壳质量非常好
# 通过for循环遍历
for corpus in llm_corpus:
    print(corpus)
2.2.2 列表的排序与去重(大纸箱的「整理操作」)
方法功能LLM 场景
list.sort(reverse=False)对列表进行排序,reverse=True 为降序对 LLM 语料按长度排序
sorted(list, reverse=False)返回排序后的新列表对 LLM 语料按长度排序,保留原列表
list.reverse()反转列表反转 LLM 对话历史
list.index(x, start, end)返回元素 x 第一次出现的索引查找 LLM 语料中的指定内容
list.count(x)返回元素 x 出现的次数统计 LLM 语料中的敏感词次数
# LLM场景:对语料按长度排序
llm_corpus = ["苹果15手机壳质量很好", "华为Mate60手机壳", "小米14手机壳一般"]
# 按字符长度升序
sorted_corpus = sorted(llm_corpus, key=lambda x: len(x))
print(sorted_corpus)  # 输出:["华为Mate60手机壳", "小米14手机壳一般", "苹果15..."]

三、字典(dict):LLM 的「结构化 API 参数箱」

字典是用于存储「键 - 值对」的可变容器,用{}包裹,是 LLM 开发中API 请求 / 响应的核心格式—— 所有主流 LLM 平台的 API 参数都是字典。

3.1 字典的定义

# 空字典
dict1 = {}
# 键值对字典
dict2 = {"name": "Tom", "age": 20}
# LLM API请求参数字典(OpenAI为例)
llm_api_params = {
    "model": "gpt-3.5-turbo",
    "messages": [{"role": "user", "content": "Hello"}]
}

3.2 字典的核心方法(全列表 + LLM 场景)

3.2.1 字典的增删改查(结构化箱子的「存取操作」)
增(添加 API 参数)
# 直接添加键值对
llm_api_params["temperature"] = 0.7
# 使用dict.update()添加多个键值对
llm_api_params.update({"max_tokens": 1024, "top_p": 0.8})
删(删除 API 参数)
方法功能LLM 场景
dict.pop(key, default)删除并返回指定键的值,default 为默认值删除 LLM API 的可选参数
dict.popitem()删除并返回最后一个键值对删除 LLM API 的最后一个参数
dict.clear()清空字典清空 LLM API 参数
del dict[key]删除指定键的键值对删除 LLM API 的指定参数
# LLM场景:删除可选参数
llm_api_params = {"model": "gpt-3.5-turbo", "temperature": 0.7}
llm_api_params.pop("temperature", 0.7)  # 删除温度参数,默认值0.7
改(修改 API 参数)
# 直接修改键值对
llm_api_params["model"] = "gpt-4"
查(查找 API 参数)
方法功能LLM 场景
dict[key]返回指定键的值,不存在则报错查找 LLM API 的必填参数
dict.get(key, default)返回指定键的值,不存在则返回 default查找 LLM API 的可选参数
dict.keys()返回所有键的列表遍历 LLM API 的所有参数名
dict.values()返回所有值的列表遍历 LLM API 的所有参数值
dict.items()返回所有键值对的列表遍历 LLM API 的所有参数
# LLM场景:遍历API参数
for key, value in llm_api_params.items():
    print(f"参数名:{key},参数值:{value}")
3.2.2 字典的其他方法
方法功能LLM 场景
dict.copy()复制字典复制 LLM API 参数,避免修改原参数
dict.fromkeys(iterable, value)创建新字典,键来自可迭代对象,值为 value批量创建 LLM 语料的标签字典
# LLM场景:批量创建语料标签字典
corpus = ["苹果15手机壳", "华为Mate60手机壳"]
tag_dict = dict.fromkeys(corpus, "手机壳")
print(tag_dict)  # 输出:{"苹果15手机壳":"手机壳", "华为Mate60手机壳":"手机壳"}

四、元组(tuple):LLM 的「不可变语料箱」

元组是用于存储多个数据的不可变容器,用()包裹,是 LLM 开发中存储不可变数据的工具—— 如 LLM 的固定参数、语料的固定标签等。

4.1 元组的定义

# 空元组
tuple1 = ()
# 单元素元组(必须加逗号)
tuple2 = ("apple",)
# 多元素元组
tuple3 = ("apple", "banana", 123)
# LLM固定参数元组
llm_fixed_params = ("gpt-3.5-turbo", 0.7, 1024)

4.2 元组的核心方法(全列表 + LLM 场景)

由于元组是不可变的,所以它的方法很少,只有:

方法功能LLM 场景
tuple.index(x, start, end)返回元素 x 第一次出现的索引查找 LLM 固定参数的位置
tuple.count(x)返回元素 x 出现的次数统计 LLM 固定参数的出现次数
# LLM场景:查找固定参数的位置
llm_fixed_params = ("gpt-3.5-turbo", 0.7, 1024)
model_index = llm_fixed_params.index("gpt-3.5-turbo")  # 输出:0

4.3 元组的优势与 LLM 场景

  • 不可变性:确保 LLM 的固定参数不会被意外修改
  • 性能:元组的访问速度比列表快 20% 左右
  • API 安全:用元组存储 LLM 的 API 密钥(不可修改)
# LLM场景:用元组存储API密钥
LLM_API_KEYS = ("sk-xxxxxxxx", "ak-xxxxxxxx")

五、集合(set):LLM 的「去重语料箱」

集合是用于存储唯一元素的可变容器,用{}set()创建,是 LLM 开发中去重语料的核心工具—— 如去重重复的评论、重复的对话历史等。

5.1 集合的定义

# 空集合(必须用set())
set1 = set()
# 多元素集合
set2 = {"apple", "banana", "apple"}  # 自动去重
# LLM去重语料集合
llm_corpus_set = set(["苹果15手机壳", "华为Mate60手机壳", "苹果15手机壳"])
print(llm_corpus_set)  # 输出:{"苹果15手机壳", "华为Mate60手机壳"}

5.2 集合的核心方法(全列表 + LLM 场景)

5.2.1 集合的增删改查(去重箱子的「存取操作」)
增(添加语料)
方法功能LLM 场景
set.add(x)向集合添加元素 x向 LLM 去重语料添加新元素
set.update(iterable)向集合添加可迭代对象的元素向 LLM 去重语料添加多个元素
删(删除语料)
方法功能LLM 场景
set.remove(x)删除元素 x,不存在则报错删除 LLM 去重语料的指定元素
set.discard(x)删除元素 x,不存在则不报错删除 LLM 去重语料的指定元素(推荐)
set.pop()删除并返回任意元素随机删除 LLM 去重语料的元素
set.clear()清空集合清空 LLM 去重语料
查(查找语料)
# 用in运算符判断元素是否存在
if "苹果15手机壳" in llm_corpus_set:
    print("语料已存在")
改(修改语料)

由于集合是无序的,所以无法直接修改元素,需先删除再添加:

llm_corpus_set.discard("苹果15手机壳")
llm_corpus_set.add("苹果15手机壳质量很好")
5.2.2 集合的交集、并集、差集(去重箱子的「合并 / 对比操作」)
方法功能LLM 场景
set.intersection(set2)返回两个集合的交集查找两个 LLM 语料库的共同语料
set.union(set2)返回两个集合的并集合并两个 LLM 语料库并去重
set.difference(set2)返回 set1 中有 set2 中没有的元素查找 LLM 语料库的新增语料
set.symmetric_difference(set2)返回两个集合中都没有的元素查找 LLM 语料库的差异语料
# LLM场景:合并两个语料库并去重
corpus1 = set(["苹果15手机壳", "华为Mate60手机壳"])
corpus2 = set(["华为Mate60手机壳", "小米14手机壳"])
merged_corpus = corpus1.union(corpus2)  # 输出:{"苹果15...", "华为...", "小米14..."}

六、LLM 实战:完整的语料预处理 + API 调用流程

6.1 实战需求

将爬取的电商评论语料预处理为 LLM 训练可用的格式,然后调用 LLM API 生成商品卖点。

6.2 实战完整代码

# -------------------------- 步骤1:定义原始语料(列表) --------------------------
raw_corpus = [
    "   苹果15手机壳质量很好!\n",
    "华为Mate60手机壳垃圾,摔一次就坏\n",
    "小米14手机壳一般般,性价比不高\n",
    "苹果15手机壳质量很好!\n",  # 重复语料
    "OPPO Find X7手机壳挺好的,支持无线充电\n",
    "\n",  # 空行
    "   "  # 空白行
]

# -------------------------- 步骤2:语料清洗(字符串+列表+集合) --------------------------
# 去重语料
corpus_set = set()
for line in raw_corpus:
    # 清洗:删除空白字符、替换特殊符号、转换为小写
    cleaned_line = line.strip().replace("!", "").replace(",", "").lower()
    # 跳过空行
    if cleaned_line == "":
        continue
    # 添加到集合(自动去重)
    corpus_set.add(cleaned_line)

# 转换为列表,用于后续处理
clean_corpus = list(corpus_set)
print("【清洗后去重的语料】:")
for corpus in clean_corpus:
    print(f"- {corpus}")

# -------------------------- 步骤3:构建LLM API参数(字典) --------------------------
import openai

# 配置API参数
api_key = "sk-xxxxxxxx"
openai.api_key = api_key

llm_api_params = {
    "model": "gpt-3.5-turbo",
    "messages": [
        {"role": "system", "content": "你是电商商品卖点生成专家,根据用户提供的商品评论,总结1-2个核心卖点"},
        {"role": "user", "content": "\n".join(clean_corpus)}  # 用join拼接语料
    ],
    "temperature": 0.7,
    "max_tokens": 100
}

print("\n【LLM API请求参数】:")
print(llm_api_params)

# -------------------------- 步骤4:调用LLM API并解析结果(字典) --------------------------
# (实际调用需安装openai库:pip install openai)
# response = openai.ChatCompletion.create(**llm_api_params)

# 模拟API响应
response = {
    "choices": [
        {"message": {"role": "assistant", "content": "1. 苹果15手机壳质量好;2. OPPO Find X7手机壳支持无线充电"}}
    ]
}

# 解析LLM回答
llm_answer = response["choices"][0]["message"]["content"]
print("\n【LLM生成的商品卖点】:")
print(llm_answer)

# -------------------------- 步骤5:保存结果(字符串+列表) --------------------------
with open("llm_sell_points.txt", "w") as f:
    # 写入清洗后的语料
    f.write("【清洗后的语料】\n")
    for corpus in clean_corpus:
        f.write(f"{corpus}\n")
    # 写入LLM生成的卖点
    f.write("\n【LLM生成的卖点】\n")
    f.write(llm_answer)

print("\n✅ 实战完成!结果已保存到llm_sell_points.txt")

6.3 运行结果

【清洗后去重的语料】:
- oppo find x7手机壳挺好的支持无线充电
- 小米14手机壳一般般性价比不高
- 华为mate60手机壳垃圾摔一次就坏
- 苹果15手机壳质量很好

【LLM API请求参数】:
{'model': 'gpt-3.5-turbo', 'messages': [{'role': 'system', 'content': '你是电商商品卖点生成专家,根据用户提供的商品评论,总结1-2个核心卖点'}, {'role': 'user', 'content': 'oppo find x7手机壳挺好的支持无线充电\n小米14手机壳一般般性价比不高\n华为mate60手机壳垃圾摔一次就坏\n苹果15手机壳质量很好'}], 'temperature': 0.7, 'max_tokens': 100}

【LLM生成的商品卖点】:
1. 苹果15手机壳质量好;2. OPPO Find X7手机壳支持无线充电

✅ 实战完成!结果已保存到llm_sell_points.txt

七、零基础避坑指南

7.1 字符串的不可变性

字符串是不可变的,所有修改字符串的方法都会返回新的字符串,原字符串不会改变:

s = "hello"
s.upper()  # 原字符串不变,返回"HELLO"

7.2 列表的索引越界

访问列表中不存在的索引会报错:

list1 = [1, 2, 3]
list1[3]  # 报错:IndexError: list index out of range

7.3 字典的键必须唯一

字典的键必须是不可变类型(字符串、数字、元组),且唯一:

dict1 = {"name": "Tom", "name": "Jerry"}  # 重复键,只保留最后一个
print(dict1)  # 输出:{"name": "Jerry"}

7.4 元组的单元素逗号

定义单元素元组时必须加逗号,否则会被视为普通的括号:

tuple1 = ("apple")  # 普通字符串
tuple2 = ("apple",)  # 元组

7.5 集合的无序性

集合是无序的,无法通过索引访问元素:

set1 = {"apple", "banana"}
set1[0]  # 报错:TypeError: 'set' object is not subscriptable

八、总结:数据类型与 LLM 的「对应关系」

数据类型核心特性LLM 应用场景
字符串存储文本,不可变单条 Prompt、用户提问、LLM 回答
列表存储批量数据,可变批量语料、对话历史、API 请求列表
字典存储键值对,可变LLM API 请求参数、API 响应结果
元组存储不可变数据,不可变LLM 固定参数、API 密钥
集合存储唯一元素,可变LLM 语料去重、语料库对比

学习 Python 数据类型的核心是 **「理解每个容器的特性,在合适的场景使用合适的容器」—— 这是 LLM 开发的基础中的基础 **,掌握后你将能够轻松处理 LLM 的语料和 API 参数。

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值