#####集合#####
#由不同元素组成,集合中的元素都是无序的,集合中的元素必须全为不可变类型
#不可变类型有:字符串、数字、字符、元祖
s = {1,2,3,4,5,6,1,3,5}
print(s)
s = set('hello')
print(s)
d = set (['hello','nihao','sawadika','nihao'])
print(d)
#add()增加元素
s.add('nihao')
s.add(8)
print(s)
#copy()
s1 = s.copy()
print(s1)
#clear()
s1.clear()
print(s1)
#pop() 随机删除
print(s)
s.pop()
print(s)
#remove() 指定删除 ,删除元素不存在会报错
#s.remove('h')
print(s)
# s.remove('lskdjflsd') 删除不存在的元素会报错
# print(s)
#discard() 指定删除 ,删除元素不存在不会报错
s.discard('o')
print(s)
s.discard('lskdjflsd')
print(s)
name_python = ['xiaoming','xiaoli','xiaoqian']
name_linux =['xiaoli','xiaoyan','xiaogang','xiaoqian']
name_both = []
for name in name_python:
if name in name_linux:
name_both.append(name)
print(name_both)
#列表转换成集合
p_s = set(name_python)
l_s = set(name_linux)
print(p_s,l_s)
print('-------------交集--------------------')
#集合求交集
print(p_s&l_s)
#集合求并集
print(p_s.union(l_s))
print(p_s|l_s)
#差集
print(p_s-l_s)
print(l_s-p_s)
#交叉补集
print(p_s^l_s)
#判断是否有交集,有则返回False,无则返回True
print(p_s.isdisjoint(l_s))
#判断s1是否为s2的子集,若是则返回true,否则返回false
s1 = {1,2}
s2 = {1,2,3}
print(s1.issubset(s2)) #s1是s2的子集
#判断s2是否为s1的父集,若是则返回true
print(s2.issuperset(s1))
#update 更新值 update更新多个值,add更新一个值
s1.update(s2)
print(s1)
#集合为可变的类型,for循环可遍历的为可变类型,但可定义不可变集合 frozenset()
s = frozenset('hello') #定义不可变类型的集合
print(s)
names = ['alex','alex','zhangdan','yanliang']
n1 = set(names)
print(n1)
names = list(n1)
print(names)
#list去重,可以一步实现 names = list(set(names)) 但是通过集合去重的位置可能发生变化