集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的。
注意:
去重,把一个列表变成集合,就自动去重了
关系测试,测试两组数据之间的交集、差集、并集等关系
集合(set)是一个无序的不重复元素序列
可以使用大括号{}或者set{}函数创建集合,注意:创建一个空集合必须用set()而不是{},
因为{}是用来创建一个空字典
创建格式:
set1=set({1,2,"barry"}) set2={1,2,"barry"} print(set1) # {'barry', 1, 2} print(set2) # {'barry', 1, 2}
方法:
set1 = {'wusir', 'ritian', 'egon', 'alex', 'barry'} set2 = {'ritian', 'egon', 'alex', "Lisa"} set1.add('Lisa') # 给集合添加元素,如果元素在集合中,则不进行任何操作 set1.clear() # 移除集合中所有的元素 set2 = set1.copy() # 拷贝一个集合 set2.difference(set1) # 返回集合的差集,即返回的集合元素包含在第一个集合中,但不包含在第二个集合(方法的参数)中 set1.difference_update(set2) # 用于移除两个集合中都存在的元素 set1.discard("alex") # 用于移除指定的集合元素 re = set1.intersection(set2) # 返回两个或更多集合中都包含的元素,即交集 set1.intersection_update(set2) # 获取两个或更多集合中都重叠的元素,即计算交集 re = set1.isdisjoint(set2) # 判断两个集合内是否包含相同元素,没有返回True,有的返回False re = set1.issubset(set2) # 判断'set1'的所有元素是否都包含在集合'set2'内 re = set1.issuperset(set2) # 判断指定集合的所有元素是否都包含在原始的集合中,如果是则返回 True,否则返回 False set1.pop() # 随机删除集合里的某一个元素 set1.remove('alex') # 删除集合内指定的元素 re = set1.symmetric_difference(set2) # 返回两个集合中不重复的元素集合,即会移除两个集合中都存在的元素 set1.symmetric_difference(set2) # 在原始集合 set1 中移除与 set2 集合中的重复元素,并将不重复的元素插入到集合 set1 中 re = set1.union(set2) # 合并两个集合,重复元素只会出现一次 set1.update(set2) # 合并两个集合,重复元素只会出现一次
增:
# (1). 直接添加 set1 = {'alex','wusir','ritian','egon'} set1.add('barry') print(set1) # {'egon', 'ritian', 'alex', 'barry', 'wusir'} # (2). uppdate : 迭代着增加 set1 = {'alex','wusir','ritian','egon'} set1.update('A') set1.update('老师') set1.update([1,2,3]) print(set1) # {1, 2, 3, 'egon', 'wusir', 'A', '老', 'ritian', 'alex', '师'}
删:
# (1). 使用 remove() 方法删除一个元素 set1 = {'wusir', 'ritian', 'egon', 'alex', 'barry'} set1.remove('wusir') # 删除一个元素 print(set1) # {'barry', 'ritian', 'alex', 'egon'} # (2). 使用 pop() 方法随机删除一个元素 set2 = {'wusir', 'ritian', 'egon', 'alex', 'barry'} set2.pop() print(set2) # (3). 使用 clear() 方法清空集合 set3 = {'wusir', 'ritian', 'egon', 'alex', 'barry'} se3.clear() print(set3) # TypeError: descriptor 'clear' of 'set' object needs an argument(无值) # (4). 使用 del 函数删除集合 set4 = {'wusir', 'ritian', 'egon', 'alex', 'barry'} del set4 print(set4) # NameError: name 'set4' is not defined(没有该集合)
集合的交集:
(1). 交集 : 返回两个集合都存在的值(& 或者 intersection)
se1 = {1,2,3,4,5,6,7,8,9} se2 = {1,2,3,4} print(se1 & se2) print(se1.intersection(se2)) # {1, 2, 3, 4}
(2). 并集 : 合并两个集合,重复元素只会出现一次(| 或者 union)
se1 = {1,2,3,4,5,6,7,8,9} se2 = {1,2,3,4} print(se1 | se2) print(se1.union(se2)) # {1, 2, 3, 4, 5, 6, 7, 8, 9}
(3). 差集 : 返回一个集合,元素包含在集合 se1 ,但不在集合 se2(- 或者 difference)
se1 = {1,2,3,4,5,6,7,8,9} se2 = {1,2,3,4} print(se1 - se2) print(se1.difference(se2)) # {5, 6, 7, 8, 9}
(4). 反交集 : 返回两个集合组成的新集合,但会移除两个集合的重复元素(^ 或者 symmetric_difference)
se1 = {1,2,3,4,5,6,7,8,9} se2 = {1,2,3,4} print(se1 ^ se2) print(se1.symmetric_difference(se2)) # {5, 6, 7, 8, 9}
(5). 子集或者超集 : 判断集合 se2 的所有元素是否都包含在集合 se1 中(> < 或者 issuperset)
se1 = {1,2,3,4,5,6,7,8,9} se2 = {1,2,3,4} print(se1 < se2) # False print(se1.issuperset(se2)) # True
(6). frozenset不可变集合,让集合变成不可变类型。
se1 = {1,2,3,4,5,6,7,88,99} se2 = frozenset(se1) print(se2) # frozenset({1, 2, 3, 4, 5, 6, 7, 99, 88}) print(type(se2)) # <class 'frozenset'>