Python List 切片与 LLM Prompt 设计:从数据结构到接口调用

Python List 切片与 LLM Prompt 设计:从数据结构到接口调用

摘要:本文通过 Python 列表的切片操作,理解其灵活高效的数据处理方式,并结合 LLM API 调用,学习 Prompt 设计的核心原则:清晰指令、分步骤、约束输出格式。

📑 目录

  • Python 列表:灵活的动态容器
  • 切片:优雅的截取方式
  • 切片的高级用法:步长与负索引
  • 切片在字符串上的应用
  • 从手动实现到内置方法:trim 函数的两种写法
  • LLM API 调用:Prompt 设计的三个要点
  • 完整案例:生成亚马逊商品信息
  • 互动讨论

Python 列表:灵活的动态容器

在代码中首先创建了一个列表:

python

ini 复制代码
L = ["许洋", "大祥", "大锋", "小聂", "孙哥"]

Python 的列表与 JavaScript 的数组非常相似,都具有以下特点:

  • 动态长度,无需预先指定容量
  • 不约束元素类型,可以混合存放任意对象

这与 Java/C++ 中的原生数组(固定长度、同类型)形成鲜明对比。正因如此,列表成为 Python 中最常用的数据结构之一。

如果需要获取列表的前三项,可以用循环实现:

python

scss 复制代码
r = []
n = 3
for i in range(n):
    r.append(L[i])
# r 为 ['许洋', '大祥', '大锋']

range(n) 生成 0 到 n-1 的整数序列。这种方法虽然直观,但略显繁琐。


切片:优雅的截取方式

Python 提供了切片(slice) 操作,可以极大简化从列表中截取子列表的过程。

python

css 复制代码
L[0:3]   # 从索引 0 开始,到索引 3 结束(不包括 3),返回 ['许洋', '大祥', '大锋']
L[:3]    # 省略起始索引,默认从 0 开始,效果同上
L[-2:]   # 负索引表示从末尾倒数,-2 表示倒数第二个元素,截取到最后,返回 ['小聂', '孙哥']

切片的语法为 [start:stop:step]

  • start:起始索引(包含),可省略(默认为 0)
  • stop:结束索引(不包含),可省略(默认为列表长度)
  • step:步长,可省略(默认为 1)

负索引让从尾部截取变得极其方便,无需先计算长度。


切片的高级用法:步长与负索引

通过对一个包含 0 到 99 的列表进行各种切片,可以展示切片的强大:

python

ini 复制代码
L = list(range(100))   # 生成 [0,1,2,...,99]

L[:10]      # 前 10 个元素
L[-10:]     # 后 10 个元素
L[:10:2]    # 前 10 个元素中,每隔一个取一个(步长为 2)
L[::5]      # 整个列表中,每 5 个取一个,结果为 [0,5,10,...,95]

步长可以为负数,实现反向切片:

python

ini 复制代码
L[::-1]     # 反转列表
L[10:0:-2]  # 从索引 10 反向走到索引 1,步长为 2

切片不会修改原列表,而是返回一个新列表,这使得它非常适合函数式编程风格。


切片在字符串上的应用

字符串在 Python 中也可以使用切片,因为字符串被视为字符序列。

python

arduino 复制代码
'ABCDEFG'[:3]   # 输出 'ABC'
'ABCDEFG'[::2]  # 输出 'ACEG'

字符串是不可变对象,切片返回的是新字符串,原字符串不变。


从手动实现到内置方法:trim 函数的两种写法

代码中实现了一个去除字符串首尾空格的功能,先使用 Python 内置的 strip() 方法:

python

python 复制代码
a = "   hello world "
def trim(s):
    return s.strip()
print(trim(a))   # "hello world"

然后又手动实现了一个不使用 strip() 的版本,利用切片和双指针:

python

sql 复制代码
def trim(s):
    left = 0
    while left < len(s) and s[left] == ' ':
        left += 1
    right = len(s)
    while right > left and s[right-1] == ' ':
        right -= 1
    return s[left:right]

这段代码的逻辑:

  1. 左指针向右移动,跳过所有空格,找到第一个非空格字符。
  2. 右指针从末尾向左移动,跳过所有空格,找到最后一个非空格字符的下一个位置。
  3. 用切片 s[left:right] 截取中间部分。

这个练习很好地展示了切片在实际算法中的简洁性。


LLM API 调用:Prompt 设计的三个要点

代码中调用了一个大模型 API(DeepSeek),并传入了一个结构化 Prompt。

首先初始化客户端:

python

ini 复制代码
from openai import OpenAI

client = OpenAI(
    api_key = "填写你的key",
    base_url = "https://api.deepseek.com/v1"
)

API 封装与调用函数:

python

ini 复制代码
COMPLETION_MODEL = "deepseek-chat"

def get_response(prompt):
    response = client.chat.completions.create(
        model = COMPLETION_MODEL,
        messages = [{"role":"user","content":prompt}]
    )
    return response.choices[0].message.content

从代码中的 Prompt 可以看出三个关键设计原则

1. 清晰且详细的表达目标

Prompt 明确告诉模型任务是什么:生成商品标题、卖点、价格区间。而不是含糊地说"介绍一下这个产品"。

2. 分步骤描述

Prompt 使用了序号:

  1. Compose human readable title...
  2. Write 5 selling points...
  3. Evaluate a price range...

分步骤能引导模型按顺序思考,减少遗漏。

3. 约束返回内容的格式

Prompt 明确要求:

Output result in json format with three properties called title, selling_point and price_range.

这确保了模型的输出可以被程序直接解析,便于后续处理。细节甚至指定了字段名。


完整案例:生成亚马逊商品信息

原始商品描述为中文:

工厂现货PVC充气青蛙夜市地摊热卖充气玩具发光蛙儿童水上玩具

Prompt 要求模型:

  • 生成一个不超过 20 个英文单词的亚马逊标题
  • 写出 5 个卖点
  • 评估一个美元价格区间
  • 以 JSON 格式输出

模型返回了结构化的结果(示例输出):

json

bash 复制代码
{
  "title": "Glow-in-the-Dark PVC Inflatable Frog Toy for Kids Night Market Pool Water Fun",
  "selling_point": [
    "Eye-catching LED lights make frogs glow at night...",
    "Made from durable PVC material...",
    ...
  ],
  "price_range": "$8.99 - $14.99 per toy"
}

这个例子很好地体现了:通过清晰、分步骤、带格式约束的 Prompt,可以让大模型完成复杂的商业文案生成任务,输出可直接用于电商平台。


互动讨论

  1. 为什么 Python 的切片比手动循环更受欢迎? 除了代码简洁,还有什么性能或可读性上的优势?
  2. 在手动实现 trim 函数时,为什么不能直接用 s[left:right] 而要先计算左右指针? 能否用一行切片实现相同的功能?
  3. LLM Prompt 中的"分步骤"是否总是必要? 在什么场景下可以省略?
  4. 如果你要生成一个 JSON 数组而不是单个对象,Prompt 应该如何修改? 能否尝试写一个示例?
  5. Python 列表的切片和 JavaScript 数组的 slice 方法有何异同? 你更习惯哪一种?

📌 核心收获:切片是 Python 处理序列数据的利器,而 Prompt 设计则是与 LLM 高效沟通的"切片"------两者都追求用最简洁的方式表达复杂的操作意图。

相关推荐
一只专注api接口开发的技术猿2 小时前
OpenClaw 对接淘宝商品 API,低成本实现全天候选品监控|附可运行 Python 实操代码
大数据·开发语言·数据库·python
xingpanvip2 小时前
星盘接口开发文档:马盘次限盘接口指南
android·开发语言·python·php·lua
FBI HackerHarry浩2 小时前
第二阶段Day07【Python生成器、yield关键字、property、正则表达式】
开发语言·python·正则表达式
梦想不只是梦与想2 小时前
Python 中的 4 种作用域
python·作用域
coderwei1232 小时前
从OpenAI到Strip:用六大支柱读懂Harness Engineering的生产实践
python·ai·ai编程
海鸥-w2 小时前
Python(FastAPI)中ORM框架Sqlalchemy的安装及建表
python
Wonderful U3 小时前
Python+Django实战|个人博客内容管理系统:搭建轻量化、高自由度的个人动态博客CMS系统
人工智能·python·django
高洁013 小时前
智能体:你的私人数字助理
人工智能·python·数据挖掘·virtualenv·知识图谱
海鸥-w3 小时前
python(fastapi) 实现更新,新增,删除接口
android·python·fastapi