集合是一个无序的,不重复的数据组合,它的主要作用如下:

  • 去重,把一个列表变成集合,就自动去重了
  • 关系测试,测试两组数据之前的交集、差集、并集等关系

 

 

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}
View Code

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()
View Code

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}
View Code

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中没有的元素。
View Code

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}
View Code

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}
View Code

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}
View Code

 

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}
View Code

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  #两个集合相交
View Code

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
View Code

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
View Code

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'}
View Code

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}
View Code

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}
View Code

 

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'}
View Code

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}
View Code

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'}
View Code

 

 集合的方法:

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'
View Code
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 

 

posted on 2017-06-15 17:14  Zoe233  阅读(150)  评论(0)    收藏  举报