# Auther: Aaron Fan

'''
集合是一个无序的,不重复的数据组合,它的主要作用如下:
去重,把一个列表变成集合,就自动去重了
关系测试,测试两组数据之前的交集、差集、并集等关系
'''

list_1 = [1,3,4,7,3,6,7,9]
#去重
list_1 = set(list_1)

list_2 = set([2,6,0,66,22,8,4])
list_3 = set([1,3,7])
print(list_1)
print(list_2)
print(list_3)
print("---------------------------")

#关系测试
#交集(两个列表里面都有的值,这里是46)
print(list_1.intersection(list_2))

#并集(把两个列别合并起来,然后去重):
print(list_1.union(list_2))

#差集(把list_1里面有的而list_2里面没有的取出来):
print(list_1.difference(list_2))
#对称差集(两个列表里面,互相没有的取出来,也就是只去掉那些互相都有的值)
print(list_1.symmetric_difference(list_2))

#子集(判断list_1是否包含了list_3里面的所有值)
print(list_3.issubset(list_1))
#父集(判断list_1是否为list_3的父集)
print(list_1.issuperset(list_3))

#无交集(判断list_3list_4是否完全没有任何交集)
list_4 = set([5,6,8])
print(list_3.isdisjoint(list_4))

#-----------------------关系测试的另一种写法:
'''
s = set([3,5,9,10])      #创建一个数值集合

t = set("Hello")         #创建一个唯一字符的集合


a = t | s          # t s的并集

b = t & s          # t s的交集

c = t – s          # 求差集(项在t中,但不在s中)

d = t ^ s          # 对称差集(项在ts中,但不会同时出现在二者中)

基本操作:

t.add('x')            # 添加一项

s.update([10,37,42])  # s中添加多项



使用remove()可以删除一项:

t.remove('H')   #有就删除,没有就报错
t.pop() #随机弹出一个
t.discard('H')  #有就删除,没有也不会报错

len(s)
set 的长度

x in s
测试 x 是否是 s 的成员

x not in s
测试 x 是否不是 s 的成员

s.issubset(t)
s <= t
测试是否 s 中的每一个元素都在 t

s.issuperset(t)
s >= t
测试是否 t 中的每一个元素都在 s

s.union(t)
s | t
返回一个新的 set 包含 s t 中的每一个元素

s.intersection(t)
s & t
返回一个新的 set 包含 s t 中的公共元素

s.difference(t)
s - t
返回一个新的 set 包含 s 中有但是 t 中没有的元素

s.symmetric_difference(t)
s ^ t
返回一个新的 set 包含 s t 中不重复的元素

s.copy()
返回 set “s”的一个浅复制
'''