1、集合(Set)
列表元组通过索引查找元素,字典通过键来查找元素,而接下来的集合无法去索引某个具体的元素,集合里的元素「无序」,且「自动去重」,使用「{}大括号」包裹元素,使用逗号进行分隔。另外有一点要注意:创建
空集合
必须使用set()函数
来构建,而不能直接用{},直接一个{}
的话,会直接创建一个空字典
,而 不是一个空集合。
① 集合的基本操作
代码示例如下:
# 1.集合创建 set_1 = set() # 创建一个空集合 set_2 = {1, 2, 3, 4, 5, 1, 2} # 普通方式创建集合,重复元素会被自动删除 set_3 = set('12345') # 通过字符串构建,注意元素无序 set_4 = frozenset({1,2,3,4}) # 创建一个不可变集合 print("1.集合创建:") print(set_1) print(set_2) print(set_3) print(set_4) # 2.判断元素是否在集合中 print("\n2.元素是否在集合中:") print('集合中有6这个元素:%s' % (6 in set_1)) # 判断集合中是否有此元素 print('集合中没有7这个元素:%s' % (7 not in set_1)) # 判断集合中是否有此元素 # 3.集合增删元素 print("\n3.增删集合中的元素:") set_1.add(6) print("往集合中插入一个元素6后:%s" % set_1) set_1.remove(6) # 如果删除的元素不存在会报错,建议先判断下是否存在运算再删除 print("往集合中删除一个元素6后:%s" % set_1) set_1.discard(6) # 删除集合中的一个元素,如果元素不存在,不执行任何操作 print("删除集合中的一个元素6后:%s" % set_1) set_2.pop() # 无序随机删除并返回任意一个集合元素,集合为空会引发KeyError print("随机弹出集合中的一个元素后:%s" % set_2) # 4.集合遍历 print("\n4.遍历集合中的元素:\n set_2 =", end='') for data in set_2: print(data, end='\t') # 5.清空集合 set_2.clear() print("\n\n5.清空集合中的元素 :%s" % set_2)
运行结果如下:
1.集合创建: set() {1, 2, 3, 4, 5} {'5', '3', '1', '4', '2'} frozenset({1, 2, 3, 4}) 2.元素是否在集合中: 集合中有6这个元素:False 集合中没有7这个元素:True 3.增删集合中的元素: 往集合中插入一个元素6后:{6} 往集合中删除一个元素6后:set() 删除集合中的一个元素6后:set() 随机弹出集合中的一个元素后:{2, 3, 4, 5} 4.遍历集合中的元素: set_2 =2 3 4 5 5.清空集合中的元素 :set()
② 集合运算相关的操作
代码示例如下:
set_1 = {'a', 'b', 'c', 'd', 'e', 'f'} set_2 = set('cdefgh') set_3 = set('ab') # 进行数学集合运算 # 子集,集合为某个集合的一部分,使用操作符<,或issubset()进行判断 print('集合set_2是集合set_1的子集:%s' % (set_2 < set_1)) print('集合set_3是集合set_1的子集:%s' % (set_3.issubset(set_1))) # 并集,两个集合所有元素构成的集合,使用操作符 | 或 union() 函数完成 print("集合set_1和集合set_2的并集:%s" % (set_1 | set_2)) print("集合set_1和集合set_2的并集:%s" % (set_1.union(set_2))) # 交集,同时存在于两个集合中的元素构成的集合,使用操作符 & 或 intersection() 函数完成 print("集合set_1和集合set_2的交集:%s" % (set_1 & set_2)) print("集合set_1和集合set_2的交集:%s" % (set_1.intersection(set_2))) # 差集,集合里有另一个集合里没有的元素构成的集合,使用操作符 - 或 difference() 函数完成 print("集合set_1和集合set_2的差集:%s" % (set_1 - set_2)) print("集合set_1和集合set_2的差集:%s" % (set_1.difference(set_2))) # 对称差,只属于其中一个集合而不属于另一个集合的元素组成的集合 # 或者理解成全集除去交集部分元素后剩下的元素组成的集合 # 使用操作符 ^ 或 symmetric_difference() 函数完成 print("集合set_1和集合set_2的对称差:%s" % (set_1 ^ set_2)) print("集合set_1和集合set_2的对称差:%s" % (set_1.symmetric_difference(set_2)))
运行结果如下:
集合set_2是集合set_1的子集:False 集合set_3是集合set_1的子集:True 集合set_1和集合set_2的并集:{'h', 'b', 'd', 'c', 'f', 'g', 'e', 'a'} 集合set_1和集合set_2的并集:{'h', 'b', 'd', 'c', 'f', 'g', 'e', 'a'} 集合set_1和集合set_2的交集:{'c', 'e', 'd', 'f'} 集合set_1和集合set_2的交集:{'c', 'e', 'd', 'f'} 集合set_1和集合set_2的差集:{'b', 'a'} 集合set_1和集合set_2的差集:{'b', 'a'} 集合set_1和集合set_2的对称差:{'h', 'b', 'g', 'a'} 集合set_1和集合set_2的对称差:{'h', 'b', 'g', 'a'}