一、概述
集合是无序的,天生不重复的数据组合,它的作用如下:
- 去重,即:把一个列表变成集合,就去重了
- 关系测试,即:测试两组集合的交集、并集和差集等
二、语法
1 >>> name_1 = [1,2,3,4,7,8,7,10] 2 3 #把列表转换为集合 4 >>> name_1 = set(name_1) 5 #转换后,去重 6 >>> print(name_1,type(name_1)) 7 {1, 2, 3, 4, 7, 8, 10} <class ‘set‘>
三、关系测试
1、交集(intersection())
>>> name_1 = [1,2,3,4,7,8,7,10] >>> name_2 = [1,3,5,8,10] >>> name_1 = set(name_1) >>> name_2 = set(name_2) #输出结果 >>> name_1.intersection(name_2) {8, 1, 10, 3}
交集(&)
1 >>> name_1 = [1,2,3,4,7,8,7,10] 2 >>> name_2 = [1,3,5,8,10] 3 >>> name_1 = set(name_1) 4 >>> name_2 = set(name_2) 5 #结果输出 6 >>> name_1 & name_2 7 {8, 1, 10, 3}
2、并集(union())
1 >>> name_1 = [1,2,3,4,7,8,7,10] 2 >>> name_2 = [1,3,5,8,10] 3 >>> name_1 = set(name_1) 4 >>> name_2 = set(name_2) 5 #输出结果 6 >>> name_1.union(name_2) 7 {1, 2, 3, 4, 5, 7, 8, 10}
并集(|)
1 >>> name_1 = [1,2,3,4,7,8,7,10] 2 >>> name_2 = [1,3,5,8,10] 3 >>> name_1 = set(name_1) 4 >>> name_2 = set(name_2) 5 #结果输出 6 >>> name_1 | name_2 7 {1, 2, 3, 4, 5, 7, 8, 10}
3、差集(difference())
差集取的是数值在第一个集合中,但是不在第二个集合中(在我不在你)
1 >>> name_1 = [1,2,3,4,7,8,7,10] 2 >>> name_2 = [1,3,5,8,10] 3 >>> name_1 = set(name_1) 4 >>> name_2 = set(name_2) 5 #输出结果 6 >>> name_1.difference(name_2) 7 {2, 4, 7}
差集(-)
1 >>> name_1 = [1,2,3,4,7,8,7,10] 2 >>> name_2 = [1,3,5,8,10] 3 >>> name_1 = set(name_1) 4 >>> name_2 = set(name_2) 5 #结果输出 6 >>> name_1 - name_2 7 {2, 4, 7}
4、issubset()
判断一个集合是否是另一个集合的子集
1 >>> name_1 = [1,2,3,4,7,8,7,10] 2 >>> name_3 = [1,2,3,4] 3 >>> name_1 = set(name_1) 4 >>> name_3 = set(name_3) 5 #输出结果 6 >>> name_3.issubset(name_1) 7 True
是否是子集(<=)
1 >>> name_1 = [1,2,3,4,7,8,10] 2 >>> name_3 = [1,2,3,4] 3 >>> name_1 = set(name_1) 4 >>> name_3 = set(name_3) 5 #输出 6 >>> name_3 <= name_1 7 True
5、issuperset()
判断一个集合是否是另一个集合的父集
1 >>> name_1 = [1,2,3,4,7,8,7,10] 2 >>> name_3 = [1,2,3,4] 3 >>> name_1 = set(name_1) 4 >>> name_3 = set(name_3) 5 #输出结果 6 >>> name_1.issuperset(name_3) 7 True
是否是父集(>=)
1 >>> name_1 = [1,2,3,4,7,8,10] 2 >>> name_3 = [1,2,3,4] 3 >>> name_1 = set(name_1) 4 >>> name_3 = set(name_3) 5 #输出 6 >>> name_1 >= name_3 7 True
6、对称差集(symmetric_difference())
把两个集合没有交集的数值取出来
1 >>> name_1 = [1,2,3,4,7,8,7,10] 2 >>> name_2 = [1,3,5,8,10] 3 >>> name_1 = set(name_1) 4 >>> name_2 = set(name_2) 5 #输出结果 6 >>> name_1.symmetric_difference(name_2) 7 {2, 4, 5, 7}
对称差集(^)
1 >>> name_1 = [1,2,3,4,7,8,7,10] 2 >>> name_2 = [1,3,5,8,10] 3 >>> name_1 = set(name_1) 4 >>> name_2 = set(name_2) 5 #输出 6 >>> name_1 ^ name_2 7 {2, 4, 5, 7}
7、isdisjoint()
判断两个集合是否有交集,没有交集,则返回True
1 >>> name_1 = [1,2,3,4,7,8,7,10] 2 >>> name_2 = [1,3,5,8,10] 3 >>> name_3 = [11] 4 >>> name_1 = set(name_1) 5 >>> name_2 = set(name_2) 6 >>> name_3 = set(name_3) 7 #有交集 8 >>> name_1.isdisjoint(name_2) 9 False 10 #无交集 11 >>> name_1.isdisjoint(name_3) 12 True
四、基本操作
1、添加(add())
1 >>> name_2 = [1,3,5,8,10] 2 >>> name_2 = set(name_2) 3 #添加已存在,不报错 4 >>> name_2.add(1) 5 >>> name_2 6 {8, 1, 10, 3, 5} 7 #添加不存在,添加一个新的数值 8 >>> name_2.add(11) 9 >>> name_2 10 {1, 3, 5, 8, 10, 11}
2、添加多项(update())
1 >>> name_2 = [1,3,5,8,10] 2 >>> name_2 = set(name_2) 3 >>> name_2.update([12,13,14]) 4 #输出结果 5 >>> name_2 6 {1, 3, 5, 8, 10, 12, 13, 14}
3、删除(remove(),pop(),discard())
①remove()
1 >>> name_2 = [1,3,5,8,10] 2 >>> name_2 = set(name_2) 3 >>> name_2 4 {8, 1, 10, 3, 5} 5 >>> name_2.remove(1) 6 #输出 7 >>> name_2 8 {8, 10, 3, 5} 9 #删除不存在的元素,会报错 10 >>> name_2.remove(1) 11 Traceback (most recent call last): 12 File "<input>", line 1, in <module> 13 KeyError: 1
注:用remove删除时,当元素不存在,会报错
②pop()
1 >>> name_2 = [1,3,5,8,10] 2 >>> name_2 = set(name_2) 3 >>> name_2 4 {8, 1, 10, 3, 5} 5 #输出 6 >>> name_2.pop() 7 8
注:pop是随机删除集合中的某个元素,并且打印
③discard()
1 >>> name_2 = [1,3,5,8,10] 2 >>> name_2 = set(name_2) 3 >>> name_2.discard(10) 4 #输出结果 5 >>> name_2 6 {8, 1, 3, 5} 7 #删除不存在元素,不报错 8 >>> name_2.discard(10)
注:用discard删除不存在的元素,不会出现报错
4、长度(len())
1 >>> name_1 = [1,2,3,4,7,8,7,10] 2 >>> name_1 = set(name_1) 3 #结果输出 4 >>> len(name_1) 5 7
5、x in s
测试 x 是否是 s 的成员
>>> name_1 = [1,2,3,4,7,8,7,10] >>> name_1 = set(name_1) #结果输出 >>> 1 in name_1 True
6、x not in s
测试 x 是否不是 s 的成员
1 >>> name_1 = [1,2,3,4,7,8,7,10] 2 >>> name_1 = set(name_1) 3 #输出 4 >>> 12 not in name_1 5 True
时间: 2024-12-11 12:03:42