集合
集合描述
- Python语言提供的内置数据结构;
- 集合中的元素是无序的,且集合中的元素是不可重复的
- 与列表、字典一样都属于可变数据类型的序列
集合创建
直接{}创建
set1 = {1,2,3,4,5}
print(set1) # {1, 2, 3, 4, 5}
print(type(set1)) # <class 'set'>
使用内置函数set()
set()–创建集合时,如果传入的序列有重复的值,集合会把重复的值删掉,只留一个。
set2 = set([1,2,3,1,2,4])
print(set2) # {1, 2, 3, 4}
print(type(set2))# <class 'set'>
空集合定义
空集合定义时,不能直接通过{}定义,这样定义出来的是一个字典类型。需要通过内置函数set()来定义,例子如下:
dict1 = {}
print(dict1) # {}
print(type(dict1)) # <class 'dict'>
set1 = set()
print(set1) # set()
print(type(set1)) # <class 'set'>
集合判断in/not in
在集合中判断一个元素在不在一个集合中,可以使用in/not in来判断;
set1 = {'a','b','c','d'}
print('a' in set1) # True
print('a' not in set1) # False
集合元素新增
set.add()新增单个元素
set1 = {'a','b','c','d'}
print(set1) # {'b', 'd', 'c', 'a'}
set1.add(False)
print(set1) # {False, 'b', 'c', 'a', 'd'}
set.update({})新增多个元素
set1 = {'a','b','c','d'}
set2 = {1,2,3}
set1.update(set2)
print(set1) # {1, 2, 3, 'c', 'a', 'b', 'd'}
集合元素删除
set.remove()删除指定元素
set.remove()–删除指定的元素,当元素不存在时报错
set1 = {'a','b','c','d'}
print(set1.remove('a')) # None
print(set1) # {'c', 'b', 'd'}
# print(set1.remove('q')) # KeyError: 'q'
set.discard()删除指定元素,不报错
set.discard()–删除指定的元素,当元素不存在时不会报错
set1 = {'a','b','c','d'}
print(set1.discard('a')) # None
print(set1) # {'c', 'b', 'd'}
print(set1.discard('1')) # None
set.pop()删除任意元素
set1 = {'a','b','c','d'}
print(set1.pop()) # d
print(set1.pop()) # b
print(set1.pop()) # c
print(set1.pop()) # a
print(set1.pop()) # KeyError: 'pop from an empty set'
set.clear()清空元素
set1 = {'a','b','c','d'}
print(set1.clear()) # None
print(set1) # set() 空集合
集合间的关系
判断两个集合是否相等
set1 = {1,2,3,4}
set2 = {1,2,3,4}
set3 = {1,2,6}
print(set1 == set2) # True
print(set1 == set3) # False
print(set1 != set2) # False
print(set1 != set3) # True
一个集合是另一个集合的子集
子集:就是集合1的所有元素都可以在集合2中找到,那集合1就是集合2的子集
上图上:集合A是集合B的子集。
set1 = {1,2,3,4}
set2 = {1,2,5}
set3 = {1,2}
print(set1.issubset(set1)) # True 集合相等则互为子集
print(set2.issubset(set1)) # False set2不是set1的集合
print(set3.issubset(set1)) # True set3是set1的子集
一个集合是另一个集合的超集
上图所示:集合S1是集合S2的超集,集合S2是集合S1的子集
set1 = {1,2,3,4}
set2 = {1,2,5}
set3 = {1,2}
print(set1.issuperset(set1)) # True 集合相等则互为超集
print(set1.issuperset(set2)) # False set1不是set2的超集
print(set1.issuperset(set3)) # True set1是set3的超集
两个集合是否有交集
上图中:集合A和集合B互为交集
set.isdisjoint()–判断两个集合是否包含相同的元素,如果没有返True ,否则返回False
set1 = {1,2,3,4}
set2 = {1,2,5}
set3 = {1,2}
set4 = {'a','b','c'}
# 注意:是交集则返回Flase,不是交集则返回True
print(set1.isdisjoint(set1)) # False
print(set1.isdisjoint(set2)) # False
print(set1.isdisjoint(set3)) # False
print(set1.isdisjoint(set4)) # True
print(set2.isdisjoint(set1)) # False
集合的数学操作
交集
set1 = {1,2,3,4,5,'c','d'}
set2 = {1,2,3,'a','b'}
print(set1 & set2) # {1, 2, 3}
print(set1.intersection(set2)) # {1, 2, 3}
并集
set1 = {1,2,3,4,5,'c','d'}
set2 = {1,2,3,'a','b'}
print(set1 | set2) # {'c', 1, 2, 3, 4, 5, 'a', 'b', 'd'}
print(set1.union(set2)) # {'c', 1, 2, 3, 4, 5, 'a', 'b', 'd'}
差集
set1 = {1,2,3,4,5,'c','d'}
set2 = {1,2,3,'a','b'}
print(set1 - set2) # {'c', 'd', 4, 5}
print(set1.difference(set2)) # {'c', 'd', 4, 5}
对称差集
set1 = {1,2,3,4,5,'c','d'}
set2 = {1,2,3,'a','b'}
print(set1 ^ set2) # {4, 5, 'd', 'a', 'b', 'c'}
print(set1.symmetric_difference(set2)) # {4, 5, 'd', 'a', 'b', 'c'}
集合推导式
print({i for i in range(1,10)}) # {1, 2, 3, 4, 5, 6, 7, 8, 9}
print({i*i for i in range(1,10)}) # {64, 1, 4, 36, 9, 16, 49, 81, 25}