Set集合
差集:(-或difference、对称差集:^或symmetric_difference)
set之difference & symmetric_difference
首先,对于difference()方法来说,就是不同的意思;a.defference(b)方法与b.defference(a)方法的结果是不一样的。怎么理解呢?
1、a.defference(b) 这个方法的结果就是两个集合在比较时返回a集合中存在但是b集合中不存在的元素集合;
2、b.defference(a)这个方法返回的结果就是两个集合在比较时b集合中存在但a集合中不存在的元素集合;
从下面的例子中可以看出,当a集合调用该方法时【a.difference(b)】,结果即为{3,4};同理,当b集合调用该方法时[b.difference(a)]结果就应该是{5,6,7}
再来介绍symmetric_difference(),这个方法就简单了,直接来说就是去重;直接上例子:
从上面的例子中就可以看出来了,这个方法不管是谁调用返回的结果都是一样的;就是***将两个集合中重复的元素去除,剩下的组成新的集合返回***
从网上其他地方找来的总结,感觉总结的很到位!!
另外difference()可以传入多个集合,如a.defference(b,c)即表示a集合中存在,但b集合和c集合不存在【a-b-c】
最后画张图总结下这两个方法的区别
并集:|或union
这个so easy 直接上贴图,从上面的图片也可以看出来,就是直接返回红色部分
交集:&或intersection
交集就是两个集合的公共部分,调用interssction()就是返回两个集合的交集
包含关系
s1.isdisjoint(s2) 哇这个方法有毒!!刚开始被这个方法绕进去了 哈哈!上网查了下 disjoint是不相交的意思,isdisjoint就是判断是不是不相交的意思了 看了很多博客写的有点绕! 是不是不相交?
如果两个集合相交就返回False,如果两个元素不相交就返回True
是不是没有公共部分,没有公共部分就是不相交就返回True,有公共部分就是相交,相交就返回False
下面是官方给的解释,很直白。
上个图看看嘛
s1.issuperset(s2)
s2.issubset(s1)
这两个方法就很好简单了,我是这么理解的,issuperset判断s1集合是不是s2集合的爸爸,这里显然s1集合>=s2集合是才能满足要求;issubset判断s2集合是不是s1集合的儿砸(⊙o⊙)…,这里显然s2集合<=s1集合;下面的代码段就可以直接反应出结果,都为True
集合的常用操作
元素的增加
单个元素的增加 : add(),add的作用类似列表中的append
对序列的增加 : update(),而update类似extend方法,update方法可以支持同时传入多个参数:
a = {1, 2}
a.update([3, 4], [5, 6, 8, 7])
print(a)
#{1, 2, 3, 4, 5, 6, 7, 8}
a.update('hello')
a.update([3, 4], [5, 6, 8, 7])
a.update([3, 4], [5, 6, 8, 7])
print(a)
#{1, 2, 3, 4, 5, 6, 7, 8, 'l', 'h', 'e', 'o'}
a.update([3, 4], [5, 6, 8, 7])
print(a)
#{1, 2, 3, 4, 5, 6, 7, 8, 'l', 'h', 'e', 'hello', 'o'}
元素的删除
集合删除单个元素有两种方法:
元素不在原集合中时:
set.discard(x)不会抛出异常 discard(丢弃)
set.remove(x)会抛出KeyError错误 remove(移除)
a = {1, 2, 3, 45, 6}
a.discard(1)
print(a)
#{2, 3, 6, 45}
a.discard(1)
print(a)
#{2, 3, 6, 45}
a.remove(3) #没有返回值
a.remove(3)
pop():由于集合是无序的,pop返回的结果不能确定,且当集合为空时调用pop会抛出KeyError错误,
clear():清空集合
a = {3, "a", 2.1, 11, 2, 3, 4, 5}
print(a)
#{2, 3, 'a', 4, 5, 11, 2.1}
a.pop()
a.pop()
a.pop()
a.pop()
print(a)
#{5, 11, 2.1}
a.clear()
print(a)
#set()
a.pop()