J'Blog

4 课 · 入门

语义检索

基于 Chroma 向量库,与 Workspace 知识库分离。用自然语言描述你想查的内容。 非管理员每人每天可检索 5 次(消耗站点 AI 配额)。

Python数据结构:列表、字典与集合

原文:列表、字典与集合

一句话

掌握Python核心数据结构,为构建复杂AI Agent奠定基础。

什么时候翻这页

  1. 需要处理Agent工具调用结果时,使用列表和字典组织数据
  2. 实现Agent的决策逻辑时,需要使用集合进行快速成员检测
  3. Agent需要处理异步任务队列时,使用deque实现高效队列
  4. Agent需要生成结构化输出时,使用嵌套列表推导式处理复杂数据

核心概念

  1. 列表:有序、可变的数据集合,支持索引、切片和多种操作方法
  2. 字典:键值对集合,通过键快速访问值,是Agent处理结构化数据的基础
  3. 集合:无序、不重复元素集合,提供高效的成员检测和集合运算
  4. 元组:不可变序列,适合存储固定数据,如Agent配置参数
  5. 列表推导式:简洁创建列表的方式,适合Agent处理批量数据
  6. 循环技巧:包括enumerate、zip等,用于高效遍历数据

怎么做

  1. 使用列表作为堆栈

    stack = [3, 4, 5]
    stack.append(6)  # 添加元素到栈顶
    stack.pop()     # 从栈顶移除元素
    
  2. 使用列表作为队列

    from collections import deque
    queue = deque(["Eric", "John", "Michael"])
    queue.append("Terry")     # 添加到队列末尾
    queue.popleft()          # 从队列开头移除
    
  3. 使用列表推导式

    # 创建平方列表
    squares = [x**2 for x in range(10)]
    
    # 带条件的列表推导式
    filtered = [x for x in range(10) if x % 2 == 0]
    
  4. 使用字典存储键值对

    tel = {'jack': 4098, 'sape': 4139}
    tel['guido'] = 4127  # 添加键值对
    print(tel.get('jack'))  # 安全获取值
    
  5. 使用集合进行成员检测

    basket = {'apple', 'orange', 'banana'}
    if 'apple' in basket:  # 快速成员检测
        print("有苹果")
    
  6. 使用循环技巧

    # 同时获取索引和值
    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)安全获取键值,键不存在返回Nonetel.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 开发的联系

  1. 工具结果处理:Agent调用外部工具后,通常返回列表或字典格式的结果,需要熟练掌握这些数据结构的操作方法来处理和提取信息
  2. 状态管理:Agent可以使用字典维护对话状态,列表存储历史记录,集合跟踪已处理内容
  3. 结构化输出:使用嵌套列表推导式和字典推导式,可以高效生成Agent所需的格式化输出
  4. 异步任务队列:使用deque实现的高效队列,可用于管理Agent的异步任务处理流程

初学者易错点

  1. 列表方法如insertremovesort会原地修改列表并返回None,不应将返回值赋给变量
  2. 字典键必须是不可变类型,列表不能作为字典键
  3. 集合是无序的,不应依赖元素的插入顺序
  4. 列表推导式中,forif的顺序会影响结果,必须仔细考虑
  5. 使用del语句删除元素后,再访问会引发IndexErrorKeyError

相关词条

  • tutorial-controlflow 控制流:条件语句和循环
  • tutorial-functions 函数定义与调用
  • tutorial-modules 模块与包的使用
  • tutorial-classes 类与对象:面向对象编程基础
  • tutorial-iterators 迭代器与生成器
  • tutorial-errors 异常处理与错误管理

官方原文:https://docs.python.org/zh-cn/3/tutorial/datastructures.html