10--最后一个数据类型集合
集合
1、定义
在{}内用,分隔开多个元素,必须满足以下三个条件
# 1、集合内的元素必须为不可变类型 # 2、集合内元素无序 # 3、集合内元素没有重复
验证上述三个条件
s = {} # 空的花括号默认定义的是空字典 s = {1,2,'a',(1,4)} # 底层是调用了set()功能 print(s) # 定义空集合 s1 = set() # 1、集合内的元素必须为不可变类型 # s2 = {[1,2,3],1} # 不可哈希是可变类型 # print(s2) # 2、集合内元素无序 s = {1,2,'a',(1,4)} # 底层是调用了set()功能 print(s) # 3、集合内元素没有重复,可以进行去重 s = {1,1,1,1,1,2,2} print(s)
2、类型转换:相当于底层调用for循环,取出每一个值放在集合中
# 对字符串进行转换,会自动将字符串中重复的去掉 s = set('hellollllop') print(s) # 对列表进行转换 s = set([1,2,3,4,5,6]) # s = set([1,2,3,4,5,6,[1,2]]) 这个就是错的 # print(s) # 对字典进行转换 s = set({'k1':12,'k2':13}.items()) print(s) s = set({'k1':12,'k2':13}) print(s) s = set({'k1':12,'k2':13}.values()) print(s)
3、内置方法
3.1 关系运算
a = {1, 2, 3} b = {2, 3, 4} # 交集:求共同的值,两种方法 res = a & b res1 = a.intersection(b) print(res) print(res1) # 并集:两者所有的值,重复的去掉 res = a | b res1 = a.union(b) print(res) print(res1) # 差集:取a独有的值,a为被减 res = a - b res1 = a.difference(b) print(res) print(res1) # 对称差集:两个独有的值 res = a ^ b res1.symmetric_difference(b) print(res) print(res1) # 父子集:包含的关系,当两个集合相等时,互为父子集 s4 = {1,2,3} s5 = {1,2} res = s4.issubset(s5) res1 = s4.issuperset(s5) print(s4 > s5)
3.2 去重操作
# 局限性 # 只能针对不可变类型去重 print(set([1,1,1,1,2,3])) # 无法保证原来的顺序 # 针对可变类型去重,需要自己写代码 l=[ {'name':'lili','age':18,'sex':'male'}, {'name':'jack','age':73,'sex':'male'}, {'name':'tom','age':20,'sex':'female'}, {'name':'lili','age':18,'sex':'male'}, {'name':'lili','age':18,'sex':'male'}, ] new_l = [] for info in l: if info not in new_l: new_l.append(info) l = new_l print(new_l) print(l)
3.3 len() 集合的长度
3.4 成员运算in 和 not in
3.5 for循环进行遍历
4、其他内置方法
4、1 删除
s = {1,2,3,4,5} # 用来删除元素的,指定元素不存在不会报错,do nothing s.discard(2) print(s) # 用来删除元素的,指定元素不存在报错 s.remove(2) # 随机删除 res = s.pop()
4、2更新列表
# 更新列表 s.update({3,6,9,2}) # 求差集,并把差集的值赋给该集合 s.difference_update({3,4,5}) # s = s.difference({3,4,5})
4.3 增加值 add
s.add(4)
4.4 判断两个集合是否完全独立,没有相同部分 isdisjoint()
print(s.isdisjoint({1,2,3}))