一 概述
集合是无序的,天生不重复的数据组合
集合的特性:
- 去重,把一个列表变成一个集合,就在动去重了
- 关系测试,测试两组数据之间的交集,并集,差集,对称查集等
二 语法
>>> list_1 = ['1','2','3','4'] >>> s = set(list_1) #把列表转换为集合 >>> s {'4', '3', '1', '2'} >>> t = set(['4','5','6']) #把列表转换为集合
三 关系测试
1. 交集 intersection() 和 &
>>> s {'8', '1', '10', '11', '3', '7', '4', '9', '2'} >>> t {'3', '6', '5', '4'} >>> s.intersection(t) {'3', '4'} >>> a = s & t #特殊符号& >>> a {'3', '4'}
2. 并集 union() 和 |
>>> s {'8', '1', '10', '11', '3', '7', '4', '9', '2'} >>> t {'3', '6', '5', '4'} >>> s.union(t) {'8', '10', '3', '7', '1', '4', '9', '2', '5', '6', '11'} >>> b = s | t #特殊符号 | >>> b {'8', '10', '3', '7', '1', '4', '9', '2', '5', '6', '11'}
3. 差集 difference() 和 -
>>> s {'8', '1', '10', '11', '3', '7', '4', '9', '2'} >>> t {'3', '6', '5', '4'} >>> c = s - t # 特殊符号 - ;返回一个新的set,在第一个s集合中,但不在t集合中 >>> c {'8', '10', '7', '1', '9', '2', '11'} >>> s.difference(t) #返回一个新的set, 在第一个s集合中,但不在t集合中 {'8', '10', '7', '1', '9', '2', '11'}
4. 对称差集 symmetric_difference() 和 ^
>>> s {'8', '1', '10', '11', '3', '7', '4', '9', '2'} >>> t {'3', '6', '5', '4'} >>> s.symmetric_difference(t) #返回一个新的set , 包含s 和 t 中不重复的元素 {'8', '10', '7', '5', '9', '1', '2', '6', '11'} >>> d = s ^ t #特殊符号 ^ >>> d {'8', '10', '7', '5', '9', '1', '2', '6', '11'}
5. issubset() 和 <=
判断一个集合是否是另一个集合的子集
>>> s_1 = set(['1','2','3','4']) >>> t_1 = set(['1','2']) >>> t_1.issubset(s_1) #测试是否t_1中的每一个元素都在s_1中 True >>> t_1 <= s_1 True >>>
6. issuperset() 和 >=
判断一个集合是否是另一个集合的父集
>>> s_1 = set(['1','2','3','4']) >>> t_1 = set(['1','2']) >>> t_1.issuperset(s_1) #测试是否 s_1中的每个元素都在t_1中 False >>> t_1 >= s_1 False
7.isdisjoint()
判断两个集合是否有交集,没有交集,则返回True
>>> s_1 = set(['1','2','3','4']) >>> t_1 = set(['1','2']) >>> u_1 = set([7,8]) >>> s_1.isdisjoint(t_1) False >>> s_1.isdisjoint(u_1) True >>> t_1.isdisjoint(u_1) True
四 基本操作
>>> s = ['1','2','3'] >>> s = set(s) >>> s {'3', '1', '2'} >>> s.add('4') #添加新值 >>> s {'4', '3', '1', '2'} >>> s.update(['5','6','7']) #在s中添加多项 >>> s {'3', '7', '4', '5', '1', '6', '2'} >>> s.remove('1') #使用remove可以删除一项, >>> s.remove('10') #使用remove可以删除一项,删除不存在的值会报错 Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: '10' >>> s {'3', '7', '4', '5', '6', '2'} >>> s.pop() #随机删除一个值,并打印 '3' >>> s {'7', '4', '5', '6', '2'} >>> s.discard('2') #删除一个值,删除不存在的值,不会报错 >>> s {'7', '4', '5', '6'} >>> s.discard('18') #删除一个值,删除不存在的值,不会报错 >>> s {'7', '4', '5', '6'} >>> len(s) #返回字典的长度 4 >>> '4' in s #测试4是否是s的 成员 ,是则返回True True >>> '4' not in s #测试4是否不是s的成员 False >>> '12' not in s True >>>