Python数据结构:列表、字典与集合
原文:列表、字典与集合
一句话
掌握Python核心数据结构,为构建复杂AI Agent奠定基础。
什么时候翻这页
- 需要处理Agent工具调用结果时,使用列表和字典组织数据
- 实现Agent的决策逻辑时,需要使用集合进行快速成员检测
- Agent需要处理异步任务队列时,使用deque实现高效队列
- Agent需要生成结构化输出时,使用嵌套列表推导式处理复杂数据
核心概念
- 列表:有序、可变的数据集合,支持索引、切片和多种操作方法
- 字典:键值对集合,通过键快速访问值,是Agent处理结构化数据的基础
- 集合:无序、不重复元素集合,提供高效的成员检测和集合运算
- 元组:不可变序列,适合存储固定数据,如Agent配置参数
- 列表推导式:简洁创建列表的方式,适合Agent处理批量数据
- 循环技巧:包括enumerate、zip等,用于高效遍历数据
怎么做
-
使用列表作为堆栈:
stack = [3, 4, 5] stack.append(6) # 添加元素到栈顶 stack.pop() # 从栈顶移除元素 -
使用列表作为队列:
from collections import deque queue = deque(["Eric", "John", "Michael"]) queue.append("Terry") # 添加到队列末尾 queue.popleft() # 从队列开头移除 -
使用列表推导式:
# 创建平方列表 squares = [x**2 for x in range(10)] # 带条件的列表推导式 filtered = [x for x in range(10) if x % 2 == 0] -
使用字典存储键值对:
tel = {'jack': 4098, 'sape': 4139} tel['guido'] = 4127 # 添加键值对 print(tel.get('jack')) # 安全获取值 -
使用集合进行成员检测:
basket = {'apple', 'orange', 'banana'} if 'apple' in basket: # 快速成员检测 print("有苹果") -
使用循环技巧:
# 同时获取索引和值 for i, v in enumerate(['tic', 'tac', 'toe']): print(i, v) # 同时遍历多个序列 questions = ['name', 'quest'] answers = ['lancelot', 'holy grail'] for q, a in zip(questions, answers): print(f"What is your {q}? It is {a}.")
命令 / API 速查
| 方法/函数 | 描述 | 示例 |
|---|---|---|
list.append(x) | 在列表末尾添加元素 | fruits.append('grape') |
list.pop([i]) | 移除并返回指定位置的元素 | fruits.pop() |
list.sort() | 原地排序列表 | fruits.sort() |
list.count(x) | 返回元素x出现的次数 | fruits.count('apple') |
list.index(x) | 返回元素x首次出现的索引 | fruits.index('banana') |
dict[key] | 通过键获取值 | tel['jack'] |
dict.get(key) | 安全获取键值,键不存在返回None | tel.get('irv') |
dict.items() | 返回键值对视图 | for k, v in tel.items() |
set.add(x) | 添加元素到集合 | basket.add('pear') |
set.update(s) | 添加集合s中的所有元素 | basket.update({'pear', 'grape'}) |
enumerate(iterable) | 返回包含索引和值的迭代器 | for i, v in enumerate(items) |
zip(iter1, iter2) | 将多个可迭代对象的元素配对 | for q, a in zip(questions, answers) |
reversed(seq) | 返回反向迭代器 | for i in reversed(range(5)) |
sorted(iterable) | 返回已排序的新列表 | sorted(basket) |
与 Agent 开发的联系
- 工具结果处理:Agent调用外部工具后,通常返回列表或字典格式的结果,需要熟练掌握这些数据结构的操作方法来处理和提取信息
- 状态管理:Agent可以使用字典维护对话状态,列表存储历史记录,集合跟踪已处理内容
- 结构化输出:使用嵌套列表推导式和字典推导式,可以高效生成Agent所需的格式化输出
- 异步任务队列:使用deque实现的高效队列,可用于管理Agent的异步任务处理流程
初学者易错点
- 列表方法如
insert、remove、sort会原地修改列表并返回None,不应将返回值赋给变量 - 字典键必须是不可变类型,列表不能作为字典键
- 集合是无序的,不应依赖元素的插入顺序
- 列表推导式中,
for和if的顺序会影响结果,必须仔细考虑 - 使用
del语句删除元素后,再访问会引发IndexError或KeyError
相关词条
tutorial-controlflow控制流:条件语句和循环tutorial-functions函数定义与调用tutorial-modules模块与包的使用tutorial-classes类与对象:面向对象编程基础tutorial-iterators迭代器与生成器tutorial-errors异常处理与错误管理