集合是一个无序的,不重复的数据组合,它的主要作用如下:
- 去重,把一个列表变成集合,就自动去重了
- 关系测试,测试两组数据之前的交集、差集、并集等关系


1.set.add() 添加元素
1 help(set.add) 2 Help on method_descriptor: 3 4 add(...) 5 Add an element to a set. 6 This has no effect if the element is already present. 7 #往集合中添加一个元素。对集合中已经存在的元素没有影响。 8 9 s=set([1,2,3,4,5,6]) 10 11 s.add(7) 12 s 13 Out[177]: {1, 2, 3, 4, 5, 6, 7} 14 15 s.add(7) #集合自带去重,所以不重复添加,也不报错 16 s 17 Out[179]: {1, 2, 3, 4, 5, 6, 7}
2.set.clear() 清空所有元素
1 help(set.clear) 2 Help on method_descriptor: 3 4 clear(...) 5 Remove all elements from this set. 6 7 8 s.clear() 9 s 10 Out[182]: set()
3.set.copy() 浅拷贝
1 help(set.copy) 2 Help on method_descriptor: 3 4 copy(...) 5 Return a shallow copy of a set. 6 7 s=set([1,2,3,4,5,6]) 8 s1=s.copy() 9 s1 10 Out[186]: {1, 2, 3, 4, 5, 6}
4.set.difference() s.difference(t)返回s中有的,t中没有的新集合 s-t
1 help(set.difference) 2 Help on method_descriptor: 3 4 difference(...) 5 Return the difference of two or more sets as a new set. 6 (i.e. all elements that are in this set but not the others.) 7 #s.difference(t) 返回一个新的集合, s中有但是t中没有的元素. 8 9 s={1,2,3,4,5,6,7,8,9} 10 s.difference({2,4,6,10}) 11 Out[3]: {1, 3, 5, 7, 8, 9} #返回的新集合是s的子集,且是t中没有的元素。
5.set.difference_update() s.difference_update(t)返回s中有的,t中没有的集合,直接更改s的结果。
1 help(set.difference_update) 2 Help on method_descriptor: 3 4 difference_update(...) 5 Remove all elements of another set from this set. 6 #从这个集合中移除另一个集合中的所有元素。 7 '''difference_update 与difference的功能相同,都是寻找不同的元素,差别是difference_update直接更新原有set''' 8 9 s={1,2,3,4,5,6,7,8,9} 10 s.difference_update({2,4,6,10}) #直接作用于集合s 11 s 12 Out[21]: {1, 3, 5, 7, 8, 9}
6.set.discard() set.remove()的功能一样,删除集合中的元素,如集合中无该元素,不报错。
1 help(set.discard) 2 Help on method_descriptor: 3 4 discard(...) 5 Remove an element from a set if it is a member. 6 If the element is not a member, do nothing. 7 '''给定的参数是集合中的元素,在集合中删除该元素。如果没有该元素,不报错。 8 丢弃操作:remove()的友好版本,如果s中存在ojb,从s中删除它.''' 9 10 s 11 Out[23]: {1, 3, 5, 7, 8, 9} 12 s.discard(1) #删除集合中有的元素 13 s 14 Out[25]: {3, 5, 7, 8, 9} 15 s.discard(2) #集合中没有元素不报错 16 s 17 Out[27]: {3, 5, 7, 8, 9}
7.set.intersection() 将两个集合的交集作为新集合输出 s & t
1 help(set.intersection) 2 Help on method_descriptor: 3 4 intersection(...) 5 Return the intersection of two sets as a new set. 6 (i.e. all elements that are in both sets.) 7 #返回两个集合的交集,作为新的集合输出。 8 9 {1,2,3,4,5,6}.intersection({1,7,8,9}) 10 Out[34]: {1}

8.set.intersection_update() 获取交集,在原来的set上进行覆盖更新,而不是输出到新的set。
1 help(set.intersection_update) 2 Help on method_descriptor: 3 4 intersection_update(...) 5 Update a set with the intersection of itself and another. 6 #将两个集合的交集更新覆盖到集合set,不创建新集合。 7 8 s 9 Out[37]: {3, 5, 7, 8} 10 s.intersection_update({3,4,9}) #将两个集合的交集直接在原集合s上进行覆盖更新。交集的结果输出到原集合。 11 s 12 Out[39]: {3}
9.set.isdisjoint() 判断两个集合是否相交,两个有交集,则返回False;两个没有交集,则返回True。
1 help(set.isdisjoint) 2 Help on method_descriptor: 3 4 isdisjoint(...) 5 Return True if two sets have a null intersection. 6 #如果两个集合没有相交,则返回True;如果两个集合有相交,则返回False。 7 8 {1,2,3,4,5,6}.isdisjoint({9,8,7}) 9 Out[45]: True #没有相交 10 11 {1,2,3,4,5,6}.isdisjoint({1,2,9,8,7}) 12 Out[46]: False #两个集合相交
10.set.issubset() s.issubset(t)判断s是否是t的子集 s<=t
1 help(set.issubset) 2 Help on method_descriptor: 3 4 issubset(...) 5 Report whether another set contains this set. 6 #判断s是否是t的子集 7 8 {1,2,3}.issubset({1,2,3,4,5}) 9 Out[48]: True 10 11 {1,2,4}.issubset({1,2}) 12 Out[49]: False
11.set.issuperset() s.issuperset(t)判断s是否包含t s>=t
1 help(set.issuperset) 2 Help on method_descriptor: 3 4 issuperset(...) 5 Report whether this set contains another set. 6 #返回判断s是否包含t。 7 8 {1,2,4}.issuperset({1}) 9 Out[51]: True 10 11 {1,2,4}.issuperset({1,2,3,4}) 12 Out[52]: False
12.set.pop() 随机删除集合中的一个元素,如果是空集合,则会报错。
1 help(set.pop) 2 Help on method_descriptor: 3 4 pop(...) 5 Remove and return an arbitrary set element. 6 Raises KeyError if the set is empty. 7 #随机删除集合内的一个元素,并返回该删除的元素; 8 #如果集合中为空值,则会报错。 9 10 s=set('hello') 11 s 12 Out[55]: {'e', 'h', 'l', 'o'} 13 s.pop() #随机删除集合内的一个元素,并返回该删除的元素 14 Out[57]: 'e' 15 s 16 Out[58]: {'h', 'l', 'o'}
13.set.remove() 删除集合中存在的指定的该元素,若集合中没有该元素,报错。
1 Help on method_descriptor: 2 3 remove(...) 4 Remove an element from a set; it must be a member. 5 If the element is not a member, raise a KeyError. 6 #从集合中删除指定的元素。如集合中没有该元素,则会报错。 7 8 s 9 Out[29]: {3, 5, 7, 8, 9} 10 11 s.remove(1) 12 Traceback (most recent call last): 13 File "<ipython-input-30-47aee57f52ad>", line 1, in <module> 14 s.remove(1) 15 KeyError: 1 16 17 18 s.remove(9) 19 s 20 Out[32]: {3, 5, 7, 8}
14.set.symmetric_difference() 对称差分操作:s中包括仅属于s或仅属于t的成员,输出新集合 s^t
1 help(set.symmetric_difference) 2 Help on method_descriptor: 3 4 symmetric_difference(...) 5 Return the symmetric difference of two sets as a new set. 6 (i.e. all elements that are in exactly one of the sets.) 7 #返回两个集合的对称差分,作为新集合输出。 8 #所有的元素仅仅在两个元素中有且仅有一个,删除交集。 9 10 {1,2,3}.symmetric_difference({1,4,5,6}) 11 Out[66]: {2, 3, 4, 5, 6} #删除交集{1}

15.set.symmetric_difference_update() 对称差分修改操作:s中包括仅属于s或仅属于t的成员,在原集合上修改
1 help(set.symmetric_difference_update) 2 Help on method_descriptor: 3 4 symmetric_difference_update(...) 5 Update a set with the symmetric difference of itself and another. 6 #在原集合s上更新两个集合中去掉交集的元素。 7 8 s 9 Out[68]: {1, 2, 3, 'o', 'l', 'h'} 10 s.symmetric_difference_update({1,9,87}) 11 s 12 Out[70]: {2, 3, 'o', 'l', 9, 87, 'h'}
16.set.union() 将两个集合的并集作为新集合输出 s | t
1 help(set.union) 2 Help on method_descriptor: 3 4 union(...) 5 Return the union of sets as a new set. 6 (i.e. all elements that are in either set.) 7 #返回两个集合的并集作为元素的新集合 8 9 {1,2,3}.union({2,4}) 10 Out[60]: {1, 2, 3, 4}
17.set.update() 将两个集合的并集结果直接在原来的集合中更新
1 help(set.update) 2 Help on method_descriptor: 3 4 update(...) 5 Update a set with the union of itself and others. 6 #将两个集合的并集在原来的集合中直接更新。 7 8 s 9 Out[62]: {'h', 'l', 'o'} 10 s.update({1,2,3,'o'}) 11 s 12 Out[64]: {1, 2, 3, 'o', 'l', 'h'}
集合的方法:
len(s) #集合计数,返回集合s中的元素个数
set([obj]) #可变集合工厂函数:obj必须是支持迭代的,如列表,字典等,由obj中的元素创建集合,否则创建一个空集合
1 set([1,2,3]) 2 Out[72]: {1, 2, 3} 3 4 set((1,2,3)) 5 Out[73]: {1, 2, 3} 6 7 set({1:2,3:4}) 8 Out[74]: {1, 3}
frozenset([obj]) #不可变集合工厂函数:执行方式和set()方法相同,但它返回的是不可变集合
1 frozenset([1,2,3]) 2 Out[75]: frozenset({1, 2, 3}) 3 4 s=frozenset([1,2,3]) 5 6 s.update({4,5}) 7 Traceback (most recent call last): 8 9 File "<ipython-input-77-7d750493f9ab>", line 1, in <module> 10 s.update({4,5}) 11 12 AttributeError: 'frozenset' object has no attribute 'update'
1 Methods defined here: 2 1.copy() 3 2.differece() 4 3.intersection() 5 4.isdisjoint() 6 5.issubset() 7 6.issuperset() 8 7.symmetric_difference() 9 8.union
obj in s 成员测试
1 {1} in {1,2,3} 2 Out[79]: False 3 4 1 in {1,2,3} #元素的成员测试 5 Out[80]: True
obj not in s 非成员测试
1 {1} not in {1,2,3} 2 Out[81]: True 3 4 1 not in {1,2,3} 5 Out[82]: False
s==t 等价测试
1 {1,2,3}=={3,2,1} 2 Out[86]: True
s!=t 不等价测试
1 {1,2,3}!={3,2,1} 2 Out[87]: False
s <t (严格意义上)子集测试
1 {1,2,3}<{1,2,3,4} 2 Out[88]: True
s <=t 子集测试 #等价 s.issubset(t)
1 {1,2,3}<={1,2,3,4} 2 Out[88]: True
s>t (严格意义上)超集测试
1 {1,2,3}>{1,2} 2 Out[90]: True
s >=t 超集测试 #等价 s.issuperset(t)
1 {1,2,3}>={1,2,3} 2 Out[92]: True
浙公网安备 33010602011771号