#用套在推导式外层的"壳"来基本判定是什么推导式
列表推导式: [推导式]
元组推导式: (推导式) (元祖推导式是*生成器)
集合推导式: {推导式}
字典推导式: {推导式}
#--集合推导式
"""
强调:集合类型中只能放 Number 、 Tuple 、对象 和 冰冻集合
"""
zhang = {"deposit":8000,"age":18,"name":"张山"}
mou = {"deposit":5001,"age":19,"name":"哞哞"}
li = {"deposit":4009,"age":20,"name":"李四"}
zhou = {"deposit":5002,"age":21,"name":"周雨"}
shu = {"deposit":5003,"age":22,"name":"输赢"}
lei = {"deposit":4008,"age":19,"name":"雷动"}
leida = {"deposit":7000,"age":19,"name":"雷大"}
lixiao = {"deposit":4000,"age":20,"name":"李小"}
mou2 = {"deposit":3000,"age":19,"name":"牟2"}
people = [zhang,mou,li,zhou,shu,lei,leida,lixiao,mou2]
# 案例一
"""
找出年龄在18到21,存款大于等于5000 小于等于6000的人的姓氏,如果小于5000,
就把 这句话 "不是所有'姓'氏都有钱" 放到集合中
"""
res = {i['name'][0] if 18 <= i['age'] <= 21 and 5000 <= i['deposit'] <= 6000 else "不是所有"+i['name'][0]+"氏都有钱" for i in people}
print(res)
--集合相关函数
#-交集操作
#intersection() 计算一个集合和另一个集合相交部分组成的新集合(交集)
#intersection_update() 计算一个集合和另一个集合相交部分组成的新集合(交集),更新第一个集合赋值
#-差集操作
#difference() 计算一个集合和另外一个集合不同部分的数据成的新集合(相对于第一个集合)
#difference_update() 计算一个集合和另外一个集合不同部分的数据成的新集合,更新第一个集合赋值(相对于第一个集合)
#-并集操作
#union() 计算两个集合中所有不重复数据的集合
#update()计算两个集合中所有不重复数据的集合,更新第一个集合赋值(相对于第一个集合)
#-对称差集操作
#symmetric_difference() 刨除两个集合共同部分,剩下不同部分组成一个集合
#symmetric_difference_update() 刨除两个集合共同部分,剩下不同部分组成一个集合,更新第一个集合赋值
#issubset() 检测一个集合是否是另一个集合的子集
#issuperset() 检测一个集合是否是另一个集合的超集(父集)
#isdisjoint() 检测两个集合是否有相交部分 不相交 True 相交False
#*集合本身可以添加,删除,不能获取或者修改值*
#add() 向集合中添加数据
#pop()随机删除集合中的一个数据
#discard() 删除集合中制定的值(不存在的不删除)
#remove() 删除集合中制定的值(不存在则报错)
#clear() 清空集合
#copy() 复制集合
==============================================================================================================
#--集合相关函数
"""
集合本身可以添加,删除,不能获取或者修改值*
"""
#-交集操作
#intersection() 计算一个集合和另一个集合相交部分组成的新集合(交集)
setvar1 = {"周杰伦","李宇春","王宝强","沈腾","泄停封"}
setvar2 = {"周杰伦","胡歌","李易峰","张杰","谢大脚","赵本山"}
res = setvar1.intersection(setvar2)
# print(res) #{'周杰伦'}
# print(setvar1) #{'沈腾', '泄停封', '李宇春', '王宝强', '周杰伦'}
#intersection_update() 计算一个集合和另一个集合相交部分组成的新集合(交集),更新第一个集合赋值
setvar1 = {"周杰伦","李宇春","王宝强","沈腾","泄停封"}
setvar2 = {"周杰伦","胡歌","李易峰","张杰","谢大脚","赵本山"}
res = setvar1.intersection_update(setvar2)
print(res) #None
print(setvar1) #{'周杰伦'}
#-差集操作
#difference() 计算一个集合和另外一个集合不同部分的数据成的新集合(相对于第一个集合)
setvar1 = {"周杰伦","李宇春","王宝强","沈腾","泄停封"}
setvar2 = {"周杰伦","胡歌","李易峰","张杰","谢大脚","赵本山"}
res = setvar1.difference(setvar2)
print(res)
#difference_update() 计算一个集合和另外一个集合不同部分的数据成的新集合,更新第一个集合赋值(相对于第一个集合)
res = setvar1.difference_update(setvar2)
print(res)
print(setvar1)
#-并集操作
#union() 计算两个集合中所有不重复数据的集合
setvar1 = {"周杰伦","李宇春","王宝强","沈腾","泄停封"}
setvar2 = {"周杰伦","胡歌","李易峰","张杰","谢大脚","赵本山"}
res = setvar1.union(setvar2)
print(res)
#update()计算两个集合中所有不重复数据的集合,更新第一个集合赋值(相对于第一个集合)
res = setvar1.update(setvar2)
print(res)
print(setvar1)
#-对称差集操作
#symmetric_difference() 刨除两个集合共同部分,剩下不同部分组成一个集合
# 完全的包含与被包含操作是补集
"""
setvar2 完全被包含在setvar1中 才有补集
setvar1 是 setvar2的父集或超集
setvar2 是 setvar1的子集
此刻 , 子集之外的部分就是setvar2的补集
"""
setvar1 = {"小猪",'小猴',"小样","小狗"}
setvar2 = {"小狗","小猴"}
res = setvar2.symmetric_difference(setvar1)
print(res)
setvar1 = {"赤","橙","黄","绿","青","蓝","紫"}
setvar2 = {"红","橙","黄","绿","靛","蓝","紫"}
res = setvar1.symmetric_difference(setvar2)
print(res) # 对称差集
# symmetric_difference_update() 刨除两个集合共同部分,剩下不同部分组成一个集合,更新第一个集合赋值
res = setvar2.symmetric_difference_update(setvar1)
print(res)
print(setvar2)
#issubset() 检测一个集合是否是另一个集合的子集
setvar1 = {"小猪",'小猴',"小样","小狗"}
setvar2 = {"小狗","小猴"}
res = setvar2.issubset(setvar1)
print(res)
#issuperset() 检测一个集合是否是另一个集合的超集(父集)
res = setvar1.issuperset(setvar2)
print(res)
#isdisjoint() 检测两个集合是否有相交部分 不相交True 相交False
setvar1 = {"赤","橙","黄","绿","青","蓝","紫"}
setvar2 = {"红","橙","黄","绿","靛","蓝","紫"}
res = setvar1.isdisjoint(setvar2)
print(res)
#*集合本身可以添加,删除,不能获取或者修改值*
#add() 向集合中添加数据
setvar1 = {"小猪",'小猴',"小样","小狗"}
res = setvar1.add("龙猫")
print(res)
print(setvar1)
#pop()随机删除集合中的一个数据
setvar1 = {"小猪",'小猴',"小样","小狗"}
res = setvar1.pop()
print(res)
print(setvar1)
#discard() 删除集合中制定的值(不存在的不删除)
setvar1 = {"小猪",'小猴',"小样","小狗"}
# res = setvar1.discard("小狗")
res = setvar1.discard("小狗xxxxooo")
print(res)
print(setvar1)
#remove() 删除集合中制定的值(不存在则报错)
setvar1 = {"小猪",'小猴',"小样","小狗"}
res = setvar1.remove("小猪")
# res = setvar1.remove("小猪佩奇")
print(res)
print(setvar1)
#clear() 清空集合
setvar1 = {"小猪",'小猴',"小样","小狗"}
setvar1.clear()
print(setvar1)
#copy() 复制集合
# 集合里面放Number tuple 对象 冰冻集合 []
setvar1 = {1,2,3,4}
setvar2 = setvar1.copy()
setvar1.add(5)
print(setvar2)
print(setvar1)
# -- 冰冻集合
#定义:frozenset特殊的集合,冰冻集合就是一旦创建,不可以在进行任何修改的集合.
# 冰冻集合的创建(空的冰冻集合)
icebox = frozenset()
print(icebox,type(icebox))
icebox = frozenset({"周杰伦","赵本山","小沈阳"})
print(icebox,type(icebox))
# 冰冻集合的 遍历
for i in icebox:
print(i)
# 冰冻集合的推导式
res = frozenset({i for i in icebox})
print(res)
# 冰冻集合的成员操作
res111 = "周杰伦" in res
print(res111)
res222 = "赵本山" not in res
print(res222)
# 冰冻集合的交叉并"补"(对称差集)
# 交集intersection
setvar1 = {"王源","刘德华","梁朝伟","周润发"}
setvar2 = {"王俊凯","易烊千玺","王源"}
res = setvar1.intersection(setvar2)
print(res)
# 交集并更新
setvar3 = frozenset(setvar2)
res = setvar1.intersection_update(setvar3)
print(res)
print(setvar3)
print(setvar1)
# issuperset
setvar1 = {"刘德华","梁朝伟","周润发","王源"}
setvar2 = frozenset({"王源"})
res = setvar1.issuperset(setvar2)
print(res)
#冰冻集合本身只能有交叉并"补"(对称差集)的相关操作和复制, 不能获取,添加,删除,修改,清空*
setvar2 = frozenset({"王源"})
newset = setvar2.copy()
print(newset)
print(type(newset))