Set集合

  • 差集:(-或difference、对称差集:^或symmetric_difference)
  • set之difference & symmetric_difference
  • 并集:|或union
  • 交集:&或intersection
  • 包含关系
  • 集合的常用操作


差集:(-或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}

diff在python diff在python中的用法_并集


diff在python diff在python中的用法_贴图_02


diff在python diff在python中的用法_贴图_03


diff在python diff在python中的用法_并集_04


再来介绍symmetric_difference(),这个方法就简单了,直接来说就是去重;直接上例子:

diff在python diff在python中的用法_贴图_05


diff在python diff在python中的用法_常用操作_06


从上面的例子中就可以看出来了,这个方法不管是谁调用返回的结果都是一样的;就是***将两个集合中重复的元素去除,剩下的组成新的集合返回***从网上其他地方找来的总结,感觉总结的很到位!!

diff在python diff在python中的用法_贴图_07

另外difference()可以传入多个集合,如a.defference(b,c)即表示a集合中存在,但b集合和c集合不存在【a-b-c】

最后画张图总结下这两个方法的区别

diff在python diff在python中的用法_并集_08

并集:|或union

diff在python diff在python中的用法_贴图_09


这个so easy 直接上贴图,从上面的图片也可以看出来,就是直接返回红色部分

diff在python diff在python中的用法_diff在python_10

交集:&或intersection

diff在python diff在python中的用法_贴图_11


交集就是两个集合的公共部分,调用interssction()就是返回两个集合的交集

diff在python diff在python中的用法_贴图_12

包含关系

diff在python diff在python中的用法_并集_13


s1.isdisjoint(s2) 哇这个方法有毒!!刚开始被这个方法绕进去了 哈哈!上网查了下 disjoint是不相交的意思,isdisjoint就是判断是不是不相交的意思了 看了很多博客写的有点绕! 是不是不相交?如果两个集合相交就返回False,如果两个元素不相交就返回True

是不是没有公共部分,没有公共部分就是不相交就返回True,有公共部分就是相交,相交就返回False

下面是官方给的解释,很直白。

diff在python diff在python中的用法_贴图_14


上个图看看嘛

diff在python diff在python中的用法_并集_15


s1.issuperset(s2)
s2.issubset(s1)
这两个方法就很好简单了,我是这么理解的,issuperset判断s1集合是不是s2集合的爸爸,这里显然s1集合>=s2集合是才能满足要求;issubset判断s2集合是不是s1集合的儿砸(⊙o⊙)…,这里显然s2集合<=s1集合;下面的代码段就可以直接反应出结果,都为True

diff在python diff在python中的用法_并集_16

集合的常用操作

元素的增加

单个元素的增加 : 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()