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

python
L = ["许洋", "大祥", "大锋", "小聂", "孙哥"]
Python 的列表与 JavaScript 的数组非常相似,都具有以下特点:
这与 Java/C++ 中的原生数组(固定长度、同类型)形成鲜明对比。正因如此,列表成为 Python 中最常用的数据结构之一。
如果需要获取列表的前三项,可以用循环实现:
python
r = []
n = 3
for i in range(n):
r.append(L[i])
# r 为 ['许洋', '大祥', '大锋']
range(n) 生成 0 到 n-1 的整数序列。这种方法虽然直观,但略显繁琐。
Python 提供了切片(slice) 操作,可以极大简化从列表中截取子列表的过程。
python
L[0:3] # 从索引 0 开始,到索引 3 结束(不包括 3),返回 ['许洋', '大祥', '大锋']
L[:3] # 省略起始索引,默认从 0 开始,效果同上
L[-2:] # 负索引表示从末尾倒数,-2 表示倒数第二个元素,截取到最后,返回 ['小聂', '孙哥']
切片的语法为 [start:stop:step]:
start:起始索引(包含),可省略(默认为 0)stop:结束索引(不包含),可省略(默认为列表长度)step:步长,可省略(默认为 1)负索引让从尾部截取变得极其方便,无需先计算长度。
通过对一个包含 0 到 99 的列表进行各种切片,可以展示切片的强大:
python
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
L[::-1] # 反转列表
L[10:0:-2] # 从索引 10 反向走到索引 1,步长为 2
切片不会修改原列表,而是返回一个新列表,这使得它非常适合函数式编程风格。
字符串在 Python 中也可以使用切片,因为字符串被视为字符序列。
python
'ABCDEFG'[:3] # 输出 'ABC'
'ABCDEFG'[::2] # 输出 'ACEG'
字符串是不可变对象,切片返回的是新字符串,原字符串不变。
代码中实现了一个去除字符串首尾空格的功能,先使用 Python 内置的 strip() 方法:
python
a = " hello world "
def trim(s):
return s.strip()
print(trim(a)) # "hello world"
然后又手动实现了一个不使用 strip() 的版本,利用切片和双指针:
python
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]
这段代码的逻辑:
s[left:right] 截取中间部分。这个练习很好地展示了切片在实际算法中的简洁性。
代码中调用了一个大模型 API(DeepSeek),并传入了一个结构化 Prompt。
首先初始化客户端:
python
from openai import OpenAIclient = OpenAI(
api_key = "填写你的key",
base_url = "https://api.deepseek.com/v1"
)
API 封装与调用函数:
python
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 可以看出三个关键设计原则:
Prompt 明确告诉模型任务是什么:生成商品标题、卖点、价格区间。而不是含糊地说“介绍一下这个产品”。
Prompt 使用了序号:
分步骤能引导模型按顺序思考,减少遗漏。
Prompt 明确要求:
这确保了模型的输出可以被程序直接解析,便于后续处理。细节甚至指定了字段名。
原始商品描述为中文:
Prompt 要求模型:
模型返回了结构化的结果(示例输出):
json
{
"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,可以让大模型完成复杂的商业文案生成任务,输出可直接用于电商平台。
trim 函数时,为什么不能直接用 s[left:right] 而要先计算左右指针? 能否用一行切片实现相同的功能?slice 方法有何异同? 你更习惯哪一种?