集合是Python提供的内置数据结构
与列表、字典一样都属于可变类型的序列
集合是没有value的字典
只能存储不同的值
集合的创建方式
- 直接{}
s={'hello','world',1314}
- 使用内置函数set()
s=set(range(6))
print(s)
print(set([3,4,53,56]))
print(set((3,4,43,435)))
print(set('Python')
print(set({124,3,4,4,5}))
print(set())
集合元素的判断操作
in或者not in
s = {1, 2, 3, 4, 5, 6, 99, 7, 100}
print(s) # {1, 2, 3, 4, 5, 6, 99, 7, 100}
print(1 in s) # True
print(10 in s) # False
print(20 not in s) # True
集合元素的新增操作
- 调用add()方法,一次添加一个元素
s = {1, 2, 3, 4, 5, 6, 7}
s.add(8)
print(s) # {1, 2, 3, 4, 5, 6, 7, 8}
- 调用update()方法至少添加一个元素
update(元组/集合/列表)
s = {1, 2, 3, 4, 5, 6, 7}
s.update({8,9})
print(s) # {1, 2, 3, 4, 5, 6, 7, 8, 9}
集合元素的删除操作
- remove()
调用remove()方法,一次删除一个指定元素,如果指定的元素不存在抛出KeyError - discard()
调用discard()方法,一次删除一个指定元素,如果指定的元素不存在不抛出异常 - pop()
调用pop()方法,一次只删除一个任意元素,不能指定元素 - clear()
clear()方法,清空集合
集合间的关系
- 两个集合是否相等
可以使用运算符==或!=进行判断 - 一个集合是否是另一个集合的子集
可以调用方法issubset()进行判断
s1 = {1, 2, 3}
s2 = {1, 2, 3, 10}
print(s1.issubset(s2)) # true
- 一个集合是否是另一个集合的超集
可以调用方法issuperset()进行判断
s1 = {1, 2, 3}
s2 = {1, 2, 3, 10}
print(s2.issuperset(s1)) # true
- 两个集合是否没有交集
可以可以调用isdisjoint进行判断
s1 = {1, 2, 3, 11}
s2 = {1, 2, 3, 10}
s3 = {4, 5, 6}
print(s2.isdisjoint(s1)) # False 意思是有交集
print(s2.isdisjoint(s2)) # True 意思是有交集
- 交集
返回两个集合相同的部分
s1 = {1, 2, 3, 11}
s2 = {1, 2, 3, 10}
print(s1.intersection(s2)) # {1, 2, 3}
- 并集
返回两个集合相同和不相同元素的集合
s1 = {1, 2, 3, 11}
s2 = {1, 2, 3, 10}
print(s1.union(s2)) # {1, 2, 3, 10, 11}
- 差集
返回两个集合相减的部分
s1 = {1, 2, 3, 11}
s2 = {1, 2, 3, 10}
print(s1-s2) # { 11 }
print(s1.difference(s2)) # { 11 }
- 对称差集
剔除两个集合都有的元素,剩下的元素组成一个新集合。
s1 = {1, 2, 3, 11}
s2 = {1, 2, 3, 10}
s1 = {1, 2, 3, 11}
s2 = {1, 2, 3, 10}
print((s2 - s1) | (s1 - s2)) # {10, 11}
print(s2.symmetric_difference(s1)) # {10, 11}
集合生成式
{ i*i for i in range(1,10) }
s = {i*i for i in range(1,10)}
print(s) # {64, 1, 4, 36, 9, 16, 49, 81, 25}