DAY 013--set(增、删、改、查、关系)

set                                                                         

1、集合是一个无序的,不重复的数据组合,它的主要作用如下:

  • 去重,把一个列表变成一个集合,就自动去重了
  • 关系测试,测试两组数据之间的交集、差集和并集等关系

2、集合中的元素有三个特征:

  • 1. 确定性(元素必须可hash)
  • 2. 互异性(去重)
  • 3. 无序性(集合中的元素没有先后之分),如集合{3,4,5}和集合{5,3,4}算作同一个集合

3、如何将列表转成集合?

  • set(array)
se=[1,2,3,3,4,5]
print(set(se))
print(type(set(se)))

{1, 2, 3, 4, 5}
<class 'set'>

 

 

一、增                                                                    

1、set.add()                                                                             

  • 如果添加的值包含在元素中,则默认不添加
  • 添加的值不一定为集合的最后一位,集合是无序的,顺序无意义
s={1,2,3}
s.add(3)
print(s)
{1, 2, 3}

s.add(4)
print(s)
{1, 2, 3, 4}

s.add("hello")
print(s)
{1, 2, 3, "hello"}

 

2、set.update(iterable/string/set)                                             

  • 把要传入的元素拆分,做为个体传入到集合中

注意:set.add是把传入的元素整体放入set中

se = {11, 22, 33}
be = {22,44,55}

se.update(be)  # set类型
print(se)
se.update([66, 77])  # iterable类型
print(se)
se.update("hello")#string类型
print(se)

{33, 22, 55, 11, 44}
{33, 66, 22, 55, 11, 44, 77}
{66, 11, 'o', 77, 22, 33, 'e', 44, 'h', 'l', 55}

  

 

二、删除                                                                 

2.1、set.pop()                                                                          

  • 随机删除一个值,pop方法不能传入任何参数
se = {11, 22, 33}
be = {22,44,55}
se.pop("11")
print(se)
#输出结果
TypeError: pop() takes no arguments (1 given)

se = {11, 22, 33}
se.pop()
print(se)
#输出结果
{11, 22}

 

2.2、set.remove()                                                                    

  • 删除指定的内容,如果不存在会报错,KeyError
se = {11, 22, 33}
se.remove(22)
print(se)
#输出结果
{33, 11}

se.remove(40)
print(se)
#输出结果
KeyError: 40

 

2.3、set.discard()                                                                    

  • 删除指定的内容,如果不存在不会报错
se = {11, 22, 33}
se.discard(22)
print(se)
#输出结果
{33, 11}

se.discard(50)
print(se)
#输出结果
{33, 11}#未报错

 

2.4、set.clear()                                                                         

  • 清空,set这个集合还存在,只是内容为空而已
se = {11, 22, 33}
se.clear()
print(se)

set()

 

2.5、del set                                                                             

  • 删除集合
se={1,2,3,4,5}
del se
print(se)

NameError: name 'se' is not defined

 

 

三、集合运算                                                           

3.1、交集                                                                                 

集合的交集:set1和set2共有的元素

  • set1.intersection(set2)
  • set&set2
s1={1,2,3,4,5}
s2={2,6,7,3,0}
print(s1&s2)#方法一
print(s1.intersection(s2))#方法二

{2, 3}
{2, 3}

 

3.2、差集                                                                                 

集合的差集:set1中有但是set2中没有的元素

  • set1.difference(set2)
  • set1-set2
s1={1,2,3,4,5}
s2={2,6,7,3,0}
print(s1-s2)
print(s1.difference(s2))

{1, 4, 5}
{1, 4, 5}

 

3.3、并集                                                                                

集合的并集:set1和set2公有的元素

  • set1.union(set2)
  • set1 | set2
s1={1,2,3,4,5}
s2={2,6,7,3,0}

print(s1|s2)
print(s1.union(s2))


{0, 1, 2, 3, 4, 5, 6, 7}
{0, 1, 2, 3, 4, 5, 6, 7}

 

3.4、对称差集                                                                          

对称差集:set1和set2的并集减去set1和set2的交集

  • set1.symmetric_difference(set2)
  • set1^set2
s1={1,2,3,4,5}
s2={2,6,7,3,0}

print(s1^s2)
print(s1.symmetric_difference(s2))

{0, 1, 4, 5, 6, 7}
{0, 1, 4, 5, 6, 7}

 

3.5、补充说明                                                                          

  • set1.difference_update(set2)               v.s      set1.difference(set2)
  • set1.symmetic_different_update(set2)   v.s      set1.symmetic_different(set2)

说明:difference和symmetric_different会生成新一个结果,而different_update 和 symmetic_different_update会覆盖之前集合

s1={1,2,3,4,5}
s2={2,6,7,3,0}

s1.difference(s2)
print(s1)
#输出结果
{1, 2, 3, 4, 5}

s1.difference_update(s2)
print(s1)
#输出结果
{1, 4, 5}

 

 

四、集合关系判断                                                    

4.1、判断是否是子集                                                                  

  • set1.issubset(set2):set1是否为set2的子集,返回值为True或False
s1={1,2}
s2={1,2,3,4,5,6}
print(s1.issubset(s2))
#输出结果
True

 

4.2、判断是否是超集                                                                 

  • set1.issuperset(set2)set1是否为set2的超集,返回值为True或False
s1={1,2}
s2={1,2,3,4,5,6}
print(s2.issuperset(s1))

True

 

 

4.3、判断是否相交                                                                    

  • set1.isdisjoint(set2):set1和set2如果有交集为False,没有交集为True
s1={1,2}
s2={1,2,3,4,5,6}

print(s1.isdisjoint(s2))

False

 

Mark on 2018.04.13 

posted @ 2018-04-13 11:44  JunSheep  阅读(256)  评论(0编辑  收藏  举报