之前介绍了列表、元组、字符串三个数据容器,其实已经满足大多数的使用场景。
这里思考一个问题,我们为什么还要学集合?
这里主要从特性去分析
- 列表可修改、支持重复元素且有序
- 元组、字符串不可修改、支持重复元素且有序
可以发现一个共同的特点是可以重复元素
如果场景需要对内容做去重处理,列表、元组、字符串就不方便了。
而集合,最主要的特点就是:不支持元素的重复(自带去重功能)、并且内容无序。可以修改元素内容
集合的常用操作:
set.add(item) #将item添加到set中,如果item已经在set中,则无任何效果
set.remove(item) #从set中删除item,如果item不是set的成员,则引发KeyError异常
set.discard(item) #从set中删除item.如果item不是set的成员,则无任何效果
set.pop() #随机删除一个集合元素,并从set删除,有变量接收则会接收删除到的元素
set.clear() #删除set中的所有元素
set.copy() #浅复制
set.update(t) #将t中的所有元素添加到set中,t可以是另一个集合、一个序列
set.union(t) #求并集,返回所有在set和t中的元素
set.intersection(t) #求交集,返回所有同时在set和t中的都有的元素
set.intersection_update(t) #计算set与t的交集,并将结果放入set
set.difference(t) #求差集,返回所有在set中,但不在t中的元素
set.difference_update(t) #从set中删除同时也在t中的所有元素
set.symmetric_difference(t) #求对称差集,返回所有set中没有t中的元素和t中没有set中的元素组成的集合
set.sysmmetric_difference_update(t) #计算set与t的对称差集,并将结果放入set
set.isdisjoint(t) #如果set和t没有相同项,则返回True
set.issubset(t) #如果s是t的一个子集,则返回True
set.issuperset(t) #如果s是t的一个超集,则返回True
集合是无序的,所以集合不支持通过下标索引访问
很多操作跟列表类似,这里就挑几个写个demo
如下:
set1 = {1, 2, 3}
set2 = {1, 5, 6}
set3 = set1.difference(set2) #求集合1和集合2的差集
print(set3) # {2, 3}
set1.difference_update(set2) #对比集合1和集合2,在集合1内,删除和集合2相同的元素
print(set1) # {2, 3}
print(set2) #结果:集合1被修改,集合2不变
set4=set1.union(set2) #将集合1和集合2合并
print(set4)