ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Python 零基础入门第八章:集合 Set

2026/9/2 8:03:52 拓冰建站 浏览量
Python 零基础入门第八章:集合 Set 专栏Python 零基础全套入门教程 本章定位集合是 Python 四大容器类型之一列表、元组、字典、集合核心特性元素不可重复、无序主要用于去重、交集并集差集运算数据清洗、数据分析、数据对比场景高频使用。✅ 学习目标理解集合的特性无序、元素唯一掌握集合创建、增删元素操作熟练掌握集合数学运算交集、并集、差集、对称差集学会列表快速去重的集合方案区分 列表 list / 元组 tuple / 字典 dict / 集合 set 使用场景熟悉集合常用内置方法掌握不可变集合 frozenset一、集合基础概念集合set使用大括号{}存放元素和字典区别字典存放键值对集合只存放单个元素。集合两大核心特点元素不能重复自动去重重复元素会直接丢弃无序没有索引、不能通过下标取值集合里面的元素必须是不可变数据类型数字、字符串、元组列表、字典不能放入集合1.1 创建集合# 1.字面量创建集合 s1 {1,2,3,4,4,2} print(s1) # {1, 2, 3, 4} 重复自动去除 # 2.set()函数转换其他序列 list_data [11,22,22,33,33,33] s2 set(list_data) print(s2) # 3.创建空集合 ⚠️注意{}是空字典空集合必须用set() empty_set set() print(type(empty_set)) # class set # 错误empty {} 这是空字典不是集合易错点集合无序每次打印输出元素顺序不一定和创建顺序一致集合不支持下标索引取值。s {a,b,c} # print(s[0]) # 报错集合不支持索引1.2 in 判断元素是否存在集合s {苹果,香蕉,橙子} print(苹果 in s) # True print(西瓜 not in s) # True二、集合增删操作2.1 添加元素add()添加单个元素update()批量添加多个元素传入可迭代对象列表、元组、字符串s {10,20,30} # add 添加单个 s.add(40) s.add(20) # 已有元素不会报错也不会重复新增 print(s) # update批量添加 s.update([50,60]) s.update((70,)) print(s)2.2 删除元素remove(元素)删除指定元素元素不存在直接报错discard(元素)删除指定元素元素不存在不报错推荐日常使用pop()随机删除集合中一个元素并返回该元素集合无序无法指定删哪个clear()清空集合变为空集合s {1,2,3,4,5} s.remove(3) print(s) s.discard(100) # 元素不存在不会报错 res s.pop() print(被删除的元素,res) s.clear() print(s) # set()三、集合数学运算核心重点定义两个集合a {1,2,3,4,5} b {4,5,6,7,8}运算符号说明交集两个集合都同时拥有的元素并集|两个集合所有元素自动去重差集-A 有B 没有的元素对称差集^只在其中一个集合存在两边互不共有的元素a {1,2,3,4,5} b {4,5,6,7,8} # 交集 print(a b) # {4,5} # 并集 print(a | b) # {1,2,3,4,5,6,7,8} # 差集 a-ba独有的 print(a - b) # {1, 2, 3} # 对称差集去掉两边共同存在剩下全部 print(a ^ b) # {1,2,3,6,7,8}也可以使用方法调用形式print(a.intersection(b)) # 交集 print(a.union(b)) # 并集 print(a.difference(b)) # 差集 print(a.symmetric_difference(b)) #对称差集实战常用列表快速去重注意集合是无序的python3.7 之前无法保留原有顺序3.7 版本也不保证顺序。如果业务需要保留顺序集合去重需要额外处理。my_list [2,2,5,5,3,3,1] new_set set(my_list) new_list list(new_set) print(new_list)四、不可变集合 frozenset普通 set 集合可以增删修改frozenset冻结集合元素不可修改不能 add、remove可以作为字典的 key。fs frozenset([1,2,3]) print(fs) # fs.add(4) #报错不能修改五、四大容器对比总结面试高频容器符号是否有序是否可重复是否可变列表 list[]有序允许重复可变元组 tuple()有序允许重复不可变字典 dict{k:v}3.7 有序key 不重复value 可重复可变集合 set{}无序不允许重复可变使用场景速记list需要顺序、允许重复频繁增删tuple数据不允许修改用作字典 keydict存储对象映射关系键值对JSON 解析set去重、集合比对交集差集六、集合高频易错总结空集合不能写{}{}是空字典空集合必须set()集合无序不能下标索引取值不能切片存入集合的元素必须不可变列表、字典不能放进 setremove 删除不存在元素会报错优先使用 discard集合去重会打乱原有顺序如果业务需要保留顺序不要直接简单 set 转换pop () 对集合是随机删除不是删除最后一个元素和 list.pop () 行为不一样本章实战习题基础题列表data [10,20,20,30,30,30,40]利用集合完成列表去重输出新列表。创建集合 s1{1,3,5,7,9} s2{7,9,11,13}求出两个集合交集、并集、差集。定义集合nums{2,4,6}添加元素 8删除元素 4。进阶题有两个班级学生名单class_a [小明,小红,小刚,小李] class_b [小刚,小李,小张,小王]找出同时在两个班级的同学、只在 A 班级同学。 5. 用户不断输入名字存入集合利用集合自动过滤重复输入输入 q 结束打印全部名字。思考题判断集合可以作为字典的 key 吗普通 set 不行frozenset 是否可以写代码验证。✅参考答案#习题1 data [10,20,20,30,30,30,40] res list(set(data)) print(res) #习题2 s1{1,3,5,7,9} s2{7,9,11,13} print(交集,s1 s2) print(并集,s1 | s2) print(差集,s1 - s2) #习题3 nums{2,4,6} nums.add(8) nums.discard(4) print(nums) #习题4 class_a [小明,小红,小刚,小李] class_b [小刚,小李,小张,小王] sa set(class_a) sb set(class_b) print(同时两个班, sa sb) print(只在A班, sa - sb) #习题5 name_set set() while True: name input(输入名字(q退出):) if name q: break name_set.add(name) print(name_set) #习题6 # test_dict {set([1,2]):测试} #普通set报错不能做key test_dict {frozenset([1,2]):测试} print(test_dict)点赞 收藏 关注持续更新 Python 零基础全套教程