集合Set(无序集合)
定义:一组包含具有唯一性元素,且无序的数据。
其中的元素可以是int,float,bool,string,tuple,冰冻集合。复数等
集合中的元素,无法进行修改
创建:
1、创建一个空集合: set()
2、带元素的集合:{obj1, obj2, obj3,...}
集合判断:
在上述图片中,b 是 set1 和 set2 的 交集
a + b + c 是 set1 和 set2 的 并集
a 是 set1 相对于 set2 的 差集
在上述图片中,set1 是 set2 的 超集
set2 是 set1 的 子集
set1 去除 set2 的区域 为 补集
标准操作:
1、因为无法定位元素,所以增删改查都无法进行,只能使用函数进行增删操作
2、成员检测 in & not in
3、遍历: for i in set()
集合推导式。。。
4、运算符求交集,差集,并集,标准差集
交集: x = set1 & set2
并集: x = set1 | set2
差集: x = set1 - set2 项在set1中,但不在set2中
标准差集:x = set1 ^ set2 项在set1和set2中,但是不会同时出现在两者
1 set1 = {1, 2, 3, 4, 5, 6} 2 set2 = {4, 5, 6, 7, 8, 9} 3 print(set1 & set2) 4 --->{4, 5, 6} 5 print(set1 | set2) 6 --->{1, 2, 3, 4, 5, 6, 7, 8, 9} 7 print(set1 - set2) 8 --->{1, 2, 3} 9 print(set1 ^ set2) 10 --->{1, 2, 3, 7, 8, 9}
基本函数:
1、len()
2、max() & min()
3、set()
4、add()
set.add(obj) 向set中添加元素,一次只能添加一个
5、删除元素:
set.pop() 随机删除一个元素
set.remove(obj) 删除指定元素
set.discard(obj) 删除指定元素
两者区别在于,在删除不存在的值时,remove会报错,discard会忽略
6、clear()
7、copy()
判断函数:
1、difference()
获取存在于set1,但是不存在与set2中的数据的集合 即 差集
set1.difference(set2)
等价于 set1 - set2
1 set1 = {1, 2, 3, 4, 5, 6} 2 set2 = {1, 2, 7, 8, 9} 3 set3 = set1.difference(set2) 4 print(set3) 5 --->{3, 4, 5, 6}
2、difference_update()
更新set1,使其中的元素编程两个集合的差集
1 set1 = {1, 2, 3, 4, 5, 6} 2 set2 = {1, 2, 7, 8, 9} 3 set1.difference_update(set2) 4 print(set1) 5 --->{3, 4, 5, 6}
3、union()
返回一个包含 set1 和 set2 所有元素,并且去重后的集合(即:并集)
set1.union(set2)
等价于 set1 | set2
1 set1 = {1, 2, 3, 4, 5, 6} 2 set2 = {1, 2, 7, 8, 9} 3 set3 = set1.union(set2) 4 print(set3) 5 --->{1, 2, 3, 4, 5, 6, 7, 8, 9}
4、update()
更新set1,使其中的元素变为 两个集合的并集
set1.update(set2)
1 set1 = {1, 2, 3, 4, 5, 6} 2 set2 = {1, 2, 7, 8, 9} 3 set1.update(set2) 4 print(set1) 5 --->{1, 2, 3, 4, 5, 6, 7, 8, 9}
5、intersection()
计算两个set的交集
set1.intersection(set2) 等价于 set1 & set2
1 set1 = {1, 2, 3, 4, 5, 6} 2 set2 = {4, 5, 6, 7, 8, 9} 3 new_set = set1.intersection(set2) 4 print(new_set) 5 --->{4, 5, 6}
6、intersection_update()
更新set1,使其中的元素变为两个set 的交集
set1.intersection_update(set2)
1 set1 = {1, 2, 3, 4, 5, 6} 2 set2 = {4, 5, 6, 7, 8, 9} 3 set1.intersection_update(set2) 4 print(set1) 5 --->{4, 5, 6}
7、issupperset()
检测一个set是否是另一个set的超集,返回bool
set1.issupperset(set2)
1 set1 = {1, 2, 3, 4, 5, 6} 2 set2 = {1, 2} 3 print(set1.issuperset(set2)) 4 --->True 5 6 set2 = {1, 2, 3, 4, 5, 6} 7 print(set1.issuperset(set2)) 8 --->True 9 10 set3 = {1, 7} 11 print(set1.issuperset(set3)) 12 --->False 13 14 set4 = {1, 2, 3, 4, 5, 6, 7} 15 print(set1.issuperset(set4)) 16 --->False
8、issubset()
检测一个set是否是另一个set的子集,返回bool
set1.issupperset(set2)
1 set1 = {1, 2, 3, 4, 5, 6} 2 set2 = {1, 2} 3 print(set2.issubset(set1)) 4 --->True
9、isdisjoint()
检测两个set是否不相交,返回bool,相交False,不相交True
1 set1 = {1, 2, 3, 4, 5, 6} 2 set2 = {1, 2, 7, 8, 9} 3 print(set1.isdisjoint(set2)) 4 --->False
10、symmetric_difference()
返回两个集合的对称差集(即 并集 - 交集)
1 set1 = {1, 2, 3, 4, 5, 6} 2 set2 = {1, 2, 7, 8, 9} 3 print(set1.symmetric_difference(set2)) 4 --->{3, 4, 5, 6, 7, 8, 9}
11、symmetric_difference_update()
set1.symmetric_difference_update(set2)
更新set1,使其中元素变为两个set 的对称差集
1 set1 = {1, 2, 3, 4, 5, 6} 2 set2 = {1, 2, 7, 8, 9} 3 set1.symmetric_difference_update(set2) 4 print(set1) 5 --->{3, 4, 5, 6, 7, 8, 9}
冰冻集合Frozenset:
定义:一种特殊的集合类型,也是集合,就像Tuple之于List一样,Frozenset之于Set
较之于Set,其中元素无法进行修改
创建:
1、空冰冻集合:frozenset()
但一般不推荐创建空的,因为无法更改
2、带数据:frozenset(seq)
seq可以是 list,tuple,set等容器类数据
1 set1 = {1, 2, 3, 4, 5, 6} 2 set2 = frozenset(set1) 3 print(set2, type(set2)) 4 --->frozenset({1, 2, 3, 4, 5, 6}) <class 'frozenset'>
基本操作:
1、成员检测 in & not in
2、遍历: for i in frozenset()
集合推导式得到的结果,不是一个冰冻集合,取决于使用哪种括号
相关函数:
冰冻集合Frozenset可以使用集合Set的相关函数,但是局限于是否修改集合本身
冰冻集合无法修改元素