# 集合:它也是一种容器类型,可以存储多个数据,表现形式: {1, 3, 4, ...}
# 集合的作用:1、利用集合对容器类型的中数据可以去重
# 2、利用集合进行关系运算
# 集合特点:
# 1. 无序
# 2. 数据是唯一,不重复
# 3. 集合也是一个可变类型
# 定义集合
my_set = {"a", 'b', 1, 2}
print(my_set, type(my_set))
print("修改前my_set:", my_set, id(my_set))
# 集合添加数据的操作
my_set.add("c")
print("修改后my_set:", my_set, id(my_set))
# 删除数据
my_set.remove(1)
print("修改后my_set:", my_set, id(my_set))
# 4、集合的内置方法
# 关系运算
set1 = {"a","k","j","e"}
set2 = {"b","c","j","e"}
# 4.1 取交集:&
result=set1 & set2
print(result)
print(set1.intersection(set2))
# 4.2 取并集/合集:|
print(set1 | set2)
print(set1.union(set2))
# 4.3 取差集:-
print(set1 - set2)
print(set1.difference(set2))
print(set2 - set1)
print(set2.difference(set1))
# 4.4 对称差集:^
print(set1 ^ set2)
print(set1.symmetric_difference(set2))
# 4.5 父子集:
s1={1,2,3}
s2={1,2,4}
print(s1 > s2) # s1是父集
print(s1 < s2) #s1是s2的子集
s1={1,2,3}
s2={1,2}
print(s1 > s2) # 当s1大于或等于s2时,才能说是s1是s2他爹
print(s1.issuperset(s2))
print(s2.issubset(s1)) # s2 < s2 =>True
s1={1,2,3}
s2={1,2,3}
print(s1 == s2) # s1与s2互为父子
print(s1.issuperset(s2))
print(s2.issuperset(s1))
# 集合的注意点
# 1. 不能通过下标获取和修改集合中的数据
# 2. 定义一个空的集合,需要使用set(), 不能直接使用: {}表示字典
# 3. 扩展-- 集合里面只能存储不可变类型(数字,字符串,元组,range)
my_set1 = {1, 2, 'b', 'a'}
# 错误的演示
# result = my_set1[1]
# print(result)
# my_set1[2] = 4
# 定义空的集合
my_set2 = set() # 不能使用大括号创建集合 {}
print(my_set2, type(my_set2))
# 想要获取集合中的数据
# 1. for遍历
# 2. 拆包
# for value in my_set4:
# print(value)
v1, v2, v3, v4 = my_set4
print(v1, v2, v3, v4)
# 扩展:间接修改集合中的数据
my_set4.remove(1)
my_set4.add(5)
print(my_set4)
# 扩展: 清空集合中的数据
my_set5 = {1, 'a'}
print(my_set5)
my_set5.clear()
print(my_set5)
my_list = [1, 3, 1]
# 把列表转成集合,就可以对列表中的数据进行去重操作
new_set = set(my_list)
print(new_set, type(new_set))
# 把集合可以转成list
new_list = list(new_set)
print(new_list, type(new_list))
my_tuple = (1, 'a', 1, 'a')
# 把元组转成集合
new_set = set(my_tuple)
print(new_set, type(new_set))
# 把集合转成元组
new_tuple = tuple(new_set)
print(new_tuple, type(new_tuple))
# 总结: 列表、元组、集合三者之间可以相互进行类型转换
my_list = [1, 4]
new_tuple = tuple(my_list)
print(new_tuple, type(new_tuple))
new_list = list(new_tuple)
print(new_list, type(new_list))
# 这样不可以转成set
# my_list = [[1,2], [3, 4]]
# set(my_list)