集合set
思维导图:
集合的引入:
python的set和其他语言类似, 是一个无序不重复元素集, 基本功能包括关系测试和消除重复元素. 集合对象还支持union(并), intersection(交), difference(差)和sysmmetric difference(对称差集)等数学运算. 当要去除列表中的重复元素时,可将他们转换成集合,然后再转化成列表。
集合的定义
集合的创建集合是一个无序不重复元素的集不可变的数据类型一定可哈希;hash()内置函数可以判断某个类型是否可哈希;
s={int | str | tuple | float | long } 必须为不可变数据类型! 列表和字典都是可变的,可变是指改变值时,改变的是id中的值,而不是指向所改变值的id。
集合的函数:
集合的关系测试
s.intersection(s1[,..]) ##交集,不改变s (s & s1 & …..)s.intersection_update(s1[,..]) ##交集,改变ss.union(s1[,…]) ##并集,不改变s (s | s1 | ….)s.difference(s1[,..]) ##差集,不改变s (s-s1)s.difference_update(s1[,..]) ##差集,改变ss.symmetric_difference(s1) ##对等差分,两个差集的并 (s ^ s1)s.symmetric_difference_update(s1) ##对等差分,改变s s.isdisjoint(s1) ##s和s1是否没有交集,有,返回False,无,返回Trues.issubset(s1) ##s是否为s1的子集,返回bools.issuperset(s1) ##s是否为s1的父集,返回bool
s1 = {
1,
2,
3}
s2 = {
2,
3,
4}
s3 = {
1,
2}
s4 = {
5}
print "s1,s2,s3的交集:", s1.intersection(s2, s3)
print "s1,s2,s3的交集:", s1 & s2 & s3
print "s1,s2,s3的并集:", s1.union(s2, s3)
print "s1,s2,s3的并集:", s1 | s2 | s3
print "s1-s2的差集:", s1.difference(s2)
print "s1-s2的差集:", s1 - s2
print "s1-s2-s3的差集:", s1.difference(s2, s3)
print "s1-s2-s3的差集:", s1 - s2 - s3
print "s2-s1的差集:", s2.difference(s1)
print "s1和s2的对等差分:", s1.symmetric_difference(s2)
print "s1和s2的对等差分:", s1 ^ s2
print "s2和s1的对等差分:", s2.symmetric_difference(s1)
print "s1和s4是否没有交集:", s1.isdisjoint(s4)
print "s3是否为s1的子集:", s3.issubset(s1)
print "s1是否为s3的父集:", s1.issuperset(s3)
集合的增删改查:
len(s) # set 的长度 x in s # 测试 x 是否是 s 的成员增加: s.add(1) ##添加元素1至s(1个元素) s.update(s1) ##将集合|列表|元组s1元素添加至s删除: s.remove(1), # 删除存在的元素1,如果不存在,直接报错; s.discard(1) # 删除存在的元素1,如果不存在,do nothing; s.pop(), # 随即删除集合元素,不加任何参数;复制: s1 = s.copy() #s和s1的id不同 清空: s.clear()删除:del(s)
冻集(frozenset)
冻住的集合,不能增删改;frozenset(set)set(frozenset)