python 集合的操作
在Python中集合set是基本数据类型的一种,它有可变集合(set)和不可变集合(frozenset)两种。创建集合set、集合set添加、集合删除、交集、并集、差集的操作都是非常实用的方法。
1,用集合可以轻易的获取交集,并集,差集,子集,对称差集(去除交集要素的差集)
1 list_1=[1,2,3,4,5,6,7,9]#原始列表1 2 list_2=[2,8,14,46,51,9]#原始列表2 3 list_1_set=set(list_1)#原始列表1的集合 4 list_2_set=set(list_2)#原始列表2的集合 5 6 #交集 7 print(list_1_set.intersection(list_2_set))#通过intersection方法获取交集 8 print(list_1_set & list_2_set)#通过 & 方法获取交集 9 输出:{9, 2} 10 11 list_2=[2,8,14,46,51,9]#原始列表2 12 list_4=[99,88] 13 list_2_set=set(list_2)#原始列表2的集合 14 list_4_set=set(list_4)#原始列表3的集合 15 print(list_4_set.isdisjoint(list_2_set))#通过isdisjoint方法判断2者是否有交集,没有返回True 16 输出:True 17 18 #并集 19 list_1=[1,2,3,4,5,6,7,9]#原始列表1 20 list_2=[2,8,14,46,51,9]#原始列表2 21 list_1_set=set(list_1)#原始列表1的集合 22 list_2_set=set(list_2)#原始列表2的集合 23 print(list_1_set.union(list_2_set))#通过union方法可以获取并集 24 print(list_1_set|list_2_set)#通过管道符方法可以获取并集 25 输出:{1, 2, 3, 4, 5, 6, 7, 8, 9, 46, 14, 51} 26 {1, 2, 3, 4, 5, 6, 7, 8, 9, 46, 14, 51} 27 28 #差集 29 list_1=[1,2,3,4,5,6,7,9]#原始列表1 30 list_2=[2,8,14,46,51,9]#原始列表2 31 list_1_set=set(list_1)#原始列表1的集合 32 list_2_set=set(list_2)#原始列表2的集合 33 print(list_1_set.difference(list_2_set))#通过difference方法可以获取差集,1里有,2里没有的 34 print(list_1_set-list_2_set)#通过 - 方法实现差集 35 print(list_2_set.difference(list_1_set))#通过difference方法可以获取差集,2里有,1里面没有的 36 print(list_2_set-list_1_set)#通过 - 方法实现差集 37 输出: 38 {1, 3, 4, 5, 6, 7} 39 {1, 3, 4, 5, 6, 7} 40 {8, 51, 46, 14} 41 {8, 51, 46, 14} 42 43 #对称差集 44 list_1=[1,2,3,4,5,6,7,9]#原始列表1 45 list_2=[2,8,14,46,51,9]#原始列表2 46 list_1_set=set(list_1)#原始列表1的集合 47 list_2_set=set(list_2)#原始列表2的集合 48 print(list_1_set.symmetric_difference(list_2_set))#并集去除交集的要素,通过symmetric_difference方法实现 49 print(list_1_set^list_2_set)#通过 ^ 符号实现对称差集 50 输出:{1, 3, 4, 5, 6, 7, 8, 14, 46, 51} 51 {1, 3, 4, 5, 6, 7, 8, 14, 46, 51} 52 53 #子集 54 list_2=[2,8,14,46,51,9]#原始列表2 55 list_3=[2,8] 56 list_2_set=set(list_2)#原始列表2的集合 57 list_3_set=set(list_3)#原始列表3的集合 58 print(list_3_set.issubset(list_2_set))#通过issubset方法判断集合3是否是集合2的子集 59 print(list_3_set<=list_2_set) 60 61 print(list_2_set.issuperset(list_3_set))#通过issuperset方法判断集合2是否是集合3的父集 62 print(list_2_set>=list_3_set) 63 输出:True 64 True 65 True 66 True
2,集合要素的增删
list_1=[1,2,3,4,5,6,7,9] list_1_set=set(list_1)#创建一个集合 list_1_set.add(11) #添加单个要素 print (list_1_set) 输出:{1, 2, 3, 4, 5, 6, 7, 9, 11} list_1_set.update([888,999,777])#添加多个要素 print (list_1_set) 输出:{1, 2, 3, 4, 5, 6, 7, 999, 9, 777, 888} list_1_set.remove(1)#删除一个要素 print (list_1_set) 输出:{2, 3, 4, 5, 6, 7, 9} list_1_set.remove(99)#remove删除一个要素,要素不存在则报错 输出:Traceback (most recent call last): File "文件绝对路径", 错误代码行, in <module> list_1_set.remove(99)#删除一个要素,要素不存在则报错 KeyError: 99 list_1_set.discard(2)#删除一个要素 print (list_1_set) 输出:{1, 3, 4, 5, 6, 7, 9} list_1_set.discard(99)#删除一个要素,要素不存在则不报错 print (list_1_set) 输出:{1, 3, 4, 5, 6, 7, 9}
3,要素是否在集合中,x in 集合
1 list_1=[1,2,3,4,5,6,7,9]#原始列表1 2 list_1_set=set(list_1)#原始列表1的集合 3 print(2 in list_1_set)#用in方法检查2是否在集合中 4 print(99 not in list_1_set)#用in方法检查99是否在集合中 5 输出:True 6 True