1. 什么是集合
在{}内用逗号分隔开多个值,集合的特点:
1. 每个值必须是不可变类型
2. 集合无序
3. 集合内元素不能重复
# s={1,1.3,'aa',[1,2,]}#报错,集合当中的[1,2,]是列表,可变类型,不能存放在集合中
s={1,1.3,'aa'}
print(s,type(s))
#{1, 'aa', 1.3} <class 'set'>
#集合的去重功能,元素在集合中必须是唯一的
s={1,1,1,1,1,1,1,2} #s=set(....)
print(type(s))
print(s)
#<class 'set'>
#{1, 2}
2. 为何要用集合
1. 用于做关系运算
关系运算包含交集,并集,差集,交叉补集
交集:
pythons={'egon','张铁蛋','李铜蛋','赵银弹','王金蛋','艾里克斯'}
linuxs={'欧德博爱','李铜蛋','艾里克斯','lsb','ysb','wsb'}
# 1 求同时报名两门课程的学生姓名:交集
print(pythons & linuxs)
print(pythons.intersection(linuxs))#了解知识点
#
#{'李铜蛋', '艾里克斯'}
#{'李铜蛋', '艾里克斯'}
并集:
pythons={'egon','张铁蛋','李铜蛋','赵银弹','王金蛋','艾里克斯'}
linuxs={'欧德博爱','李铜蛋','艾里克斯','lsb','ysb','wsb'}
# 2 求报名老男孩学校课程的所有学生姓名:并集
print(pythons | linuxs)
print(pythons.union(linuxs))
#{'李铜蛋', 'ysb', 'egon', '欧德博爱', 'wsb', '王金蛋', '赵银弹', '艾里克斯', '张铁蛋', 'lsb'}
#{'李铜蛋', 'ysb', 'egon', '欧德博爱', 'wsb', '王金蛋', '赵银弹', '艾里克斯', '张铁蛋', 'lsb'}
差集:
pythons={'egon','张铁蛋','李铜蛋','赵银弹','王金蛋','艾里克斯'}
linuxs={'欧德博爱','李铜蛋','艾里克斯','lsb','ysb','wsb'}
# 3 求只报名python课程的学生姓名: 差集
print(pythons - linuxs)
print(pythons.difference(linuxs))
print(linuxs - pythons) #求只报名linux课程的学生姓名
print(linuxs.difference(pythons))
#{'张铁蛋', '赵银弹', 'egon', '王金蛋'}
#{'张铁蛋', '赵银弹', 'egon', '王金蛋'}
#{'ysb', 'wsb', '欧德博爱', 'lsb'}
#{'ysb', 'wsb', '欧德博爱', 'lsb'}
对称差集
pythons={'egon','张铁蛋','李铜蛋','赵银弹','王金蛋','艾里克斯'}
linuxs={'欧德博爱','李铜蛋','艾里克斯','lsb','ysb','wsb'}
# 4 求没有同时报名两门课程的学生姓名: 对称差集
print((pythons - linuxs) | (linuxs - pythons))
print(pythons ^ linuxs)
print(pythons.symmetric_difference(linuxs))
#{'lsb', '赵银弹', '王金蛋', '欧德博爱', 'ysb', '张铁蛋', 'wsb', 'egon'}
#{'lsb', '王金蛋', 'ysb', 'wsb', 'egon', '赵银弹', '欧德博爱', '张铁蛋'}
#{'lsb', '王金蛋', 'ysb', 'wsb', 'egon', '赵银弹', '欧德博爱', '张铁蛋'}
父子集:指的是一种包含与被包含的关系
s1={1,2,3}
s2={1,2}
print(s1 >= s2)#True 那么说s1是s2的父集
print(s1.issuperset(s2))#issuperset 判断父集
print(s2.issubset(s1))#issubset 判断子集
2. 去重
去重有一定的限制:
集合去重的局限性:
1. 会打乱原值的顺序
2. 只能针对不可变的值去重
集合需要掌握的操作
update 更新操作
s1={1,2,3}
s1.update({3,4,5})
print(s1)
#更新操作也会依据集合的特性从而去重
#{1, 2, 3, 4, 5}
删除元素的操作
pop
s1={1,2,3}
print(s1.pop())#删除,因为集合是无序的,所以删除也是随机删除的,返回被删除的值
print(s1)
#1
#{2, 3}
remove 根据值来删除
s1={1,2,3}
print(s1.remove(2))#没有返回值
print(s1)
#None
#{1, 3}
但是remove删除若是若是删除的值是不存在集合中的话,会报错。这是就是使用discard
s1={1,2,3}
s1.discard(4)#返回None
#s1.remove(4)#会报错
print(s1)
#{1, 2, 3}
添加值的方法 add
s1= {1,2,3}
s1.add(1)
print(s1)
#{1, 2, 3, 4}
isdisjoint 方法
s1={1,2,3}
s2={4,5}
print(s1.isdisjoint(s2))#判断没有交集
#True
======================总结===============================
存在多个值
无序
set可变