# 第 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}")