117 lines
3.9 KiB
Python
117 lines
3.9 KiB
Python
# 第 1-11 课示例:集合
|
|
#
|
|
# 本文件集中演示集合的创建、成员判断、增删、遍历和集合运算。
|
|
# 集合没有可依赖的固定顺序,因此你看到的元素显示顺序可能不同。
|
|
|
|
|
|
print("一、创建集合")
|
|
|
|
# 集合使用花括号保存多个不重复的元素。
|
|
agent_tools = {"搜索", "计算", "写作"}
|
|
print(f"Agent 工具:{agent_tools}")
|
|
print(f"工具数量:{len(agent_tools)}")
|
|
|
|
# 重复元素只会保留一份。
|
|
models = {"gpt-5", "o3", "gpt-5"}
|
|
print(f"自动去重后的模型:{models}")
|
|
|
|
# 空集合必须使用 set(),因为 {} 表示空字典。
|
|
empty_tools = set()
|
|
print(f"空集合:{empty_tools}")
|
|
print(f"空集合类型:{type(empty_tools)}")
|
|
print(f"空字典类型:{type({})}")
|
|
|
|
|
|
print("\n二、成员判断")
|
|
|
|
print(f"是否拥有搜索工具:{'搜索' in agent_tools}")
|
|
print(f"是否没有图片生成工具:{'图片生成' not in agent_tools}")
|
|
|
|
|
|
print("\n三、添加元素")
|
|
|
|
# add() 每次添加一个元素。
|
|
agent_tools.add("代码执行")
|
|
print(f"添加一个工具后:{agent_tools}")
|
|
|
|
# 重复添加不会报错,也不会产生重复元素。
|
|
agent_tools.add("搜索")
|
|
print(f"重复添加搜索后:{agent_tools}")
|
|
|
|
# update() 可以从列表等可遍历数据中添加多个元素。
|
|
agent_tools.update(["图片生成", "网页浏览"])
|
|
print(f"添加多个工具后:{agent_tools}")
|
|
|
|
|
|
print("\n四、删除元素")
|
|
|
|
# remove() 用于删除确定存在的元素。
|
|
agent_tools.remove("网页浏览")
|
|
print(f"remove() 删除后:{agent_tools}")
|
|
|
|
# discard() 在元素不存在时也不会报错。
|
|
agent_tools.discard("不存在的工具")
|
|
print(f"discard() 安全删除后:{agent_tools}")
|
|
|
|
# pop() 会删除并返回一个不确定的元素。
|
|
# 因为集合无序,不应猜测它会删除哪一个。
|
|
temporary_tools = {"工具甲", "工具乙"}
|
|
removed_tool = temporary_tools.pop()
|
|
print(f"pop() 删除的元素:{removed_tool}")
|
|
print(f"pop() 删除后的集合:{temporary_tools}")
|
|
|
|
|
|
print("\n五、遍历集合")
|
|
|
|
# sorted() 会返回排好序的新列表,方便得到稳定的展示结果。
|
|
for tool in sorted(agent_tools):
|
|
print(f"可用工具:{tool}")
|
|
|
|
|
|
print("\n六、集合运算")
|
|
|
|
code_agent_tools = {"搜索", "计算", "代码执行"}
|
|
writer_agent_tools = {"搜索", "写作", "图片生成"}
|
|
|
|
# 交集:两组集合共同拥有的元素。
|
|
common_tools = code_agent_tools & writer_agent_tools
|
|
print(f"共同工具:{common_tools}")
|
|
|
|
# 并集:两组集合的全部元素,重复项只保留一份。
|
|
all_tools = code_agent_tools | writer_agent_tools
|
|
print(f"全部工具:{all_tools}")
|
|
|
|
# 差集:左侧集合有、右侧集合没有的元素。
|
|
code_only_tools = code_agent_tools - writer_agent_tools
|
|
writer_only_tools = writer_agent_tools - code_agent_tools
|
|
print(f"代码助手独有工具:{code_only_tools}")
|
|
print(f"写作助手独有工具:{writer_only_tools}")
|
|
|
|
# 对称差集:只属于其中一组、不属于两组公共部分的元素。
|
|
different_tools = code_agent_tools ^ writer_agent_tools
|
|
print(f"两组不同的工具:{different_tools}")
|
|
|
|
|
|
print("\n七、子集与超集")
|
|
|
|
required_tools = {"搜索", "计算"}
|
|
available_tools = {"搜索", "计算", "写作"}
|
|
|
|
has_required_tools = required_tools <= available_tools
|
|
print(f"现有权限是否满足要求:{has_required_tools}")
|
|
print(f"required_tools 是否为子集:{required_tools.issubset(available_tools)}")
|
|
print(f"available_tools 是否为超集:{available_tools.issuperset(required_tools)}")
|
|
|
|
|
|
print("\n八、使用集合去重")
|
|
|
|
model_history = ["gpt-5", "o3", "gpt-5", "o3", "gpt-5-mini"]
|
|
unique_models = set(model_history)
|
|
print(f"原始模型记录:{model_history}")
|
|
print(f"去重后的模型集合:{unique_models}")
|
|
|
|
# 如果后续操作必须使用列表,可以通过 list() 转换回来。
|
|
# 转换后的列表不保证保留原列表的先后顺序。
|
|
unique_model_list = list(unique_models)
|
|
print(f"转换后的模型列表:{unique_model_list}")
|