"""可变集合set
1、把不同的元素组合在一起叫做集合
2、如果元素有相同的只会显示一个
3、集合是无序的(无法通过索引取值)
4、不能作为字典的键
5、可变集合是可变类型,可以修改的
"""
"""不可变集合frozenset
1、可以作为字典的键
2、不可变集合是不可变类型,不可以修改
"""
可变集合创建和删除
# 创建集合
"""
1、使用set创建
2、将列表转换成集合
3、通过列表转换成集合,列表的内容必须是不可变的类型
"""
set1 = set('1234542')
list1 = [1, 2, 3, 4]
set2 = set(list1)
# 如果列表内容是可变的会报错
list2 = [[1, 2, 3], 2, 4]
set3 = set(list2)
# 打印内容
print(set1)
print(set2)
# 打印类型
"""
1、会自动删除重复的内容
"""
print(type(set1))
print(type(set2))
# 删除
del set1
del set2
不可变集合创建和删除
# 创建集合
"""
1、使用frozenset创建
2、将列表转换成集合
3、通过列表转换成集合,列表的内容必须是不可变的类型
"""
set1 = frozenset('1234542')
list1 = [1, 2, 3, 4]
set2 = frozenset(list1)
# 如果列表内容是可变的会报错
list2 = [[1, 2, 3], 2, 4]
set3 = frozenset(list2)
# 打印内容
print(set1)
print(set2)
# 打印类型
"""
1、会自动删除重复的内容
"""
print(type(set1))
print(type(set2))
# 删除
del set1
del set2
可变集合其他操作
# 判断元素是否在集合
"""
1、判断元素是否在集合,返回值是True或者False
"""
set1 = set([1, 2, 3])
print(1 in set1)
# add
"""
1、增加一个元素,不存在则添加,存在则不变
"""
set1.add(6)
print(set1)
# update
"""
1、增加多个元素
"""
set1.update([4, 5])
print(set1)
# remove
"""
1、删除集合中的值
"""
set1.remove(6)
print(set1)
# pop
"""
1、随机删除,并取值返回。(测试效果好像并不是随机,而是删除第一个)
"""
r = set1.pop()
print(r)
print(set1)
# clear
"""
1、清空集合
"""
set1.clear()
print(set1)
# 集合判断的特殊
"""
1、由于集合的特性(去重),在做判断时有一些特殊
"""
# 示例1、由于集合会自动去重,所以下面返回True
print(set('abc') == set('aabbcc'))
# 子集和超集
"""
1、自己和超集是数学中包含的问题
2、集合A中包含集合B,集合B就是集合A的子集
3、and取并集(将两个集合合并在一起),也可以用union或|
4、or取交集(将两个集合都有的部分取出),也可以用intersection或&
5、差集(将第一个集合有,但是第二个集合没有的元素取出)
6、对称差集(和交集相反,将两个集合中不重复的部分取出)
"""
# 示例2、子集和超集的操作
setA = set('a')
setB = set('abc')
setC = set('bcd')
# 子集判断,是否包含
print(setA < setB)
print(setA.issubset(setB)) # A是B的子集
print(setB.issuperset(setA)) # B是A的超集
# and取并集
print(setA and setB)
print(setA.union(setB))
print(setA | setB)
# or取交集
print(setA or setB)
print(setA.intersection(setB))
print(setA & setB)
# 差集
"""
1、取setB有的setC没有的
2、取setC有的setB没有的
"""
print(setB.difference(setC))
print(setC.difference(setB))
print(setB - setC)
print(setC - setB)
# 对称差集
print(setB.symmetric_difference(setC))
print(setB ^ setC)