在python里面,把不同的元素组成一起形成集合。
集合对象是一组无序排列的可哈希的值:集合成员可以做字典的键(所有元素都不相同)
创建集合:
创建一个空集合只能用set(),用set(seq)创建集合时,只能是单个参数,seq为序列(字符串、列表等),且可哈希(序列里面的值都是不能改变的,无论是深层还是浅层。与元组不同,元组只是浅层不能改,深层可以)
1 >>> se = {} 2 >>> se 3 {} 4 >>> type(se) 5 <class 'dict'> #用 {} 直接创建的是空字典,不是空集合 6 >>> se1 = set() 7 >>> se1 8 set() 9 >>> type(se1) 10 <class 'set'> 11 >>>
创建一个非空集合:
1 >>> se = {1,2,3,4,'a','b',} 2 >>> type(se) 3 <class 'set'> 4 >>> se1 = {1,2,3,4,'a','b',[1,2]} 5 Traceback (most recent call last): 6 File "<pyshell#95>", line 1, in <module> 7 se1 = {1,2,3,4,'a','b',[1,2]} 8 TypeError: unhashable type: 'list' 9 10 >>> se2 = {1,2,3,4,'a','b',(1,2,'m',),} 11 >>> se2 12 {(1, 2, 'm'), 1, 2, 3, 4, 'a', 'b'} 13 >>> type(se2) 14 <class 'set'> 15 16 >>> se3 = {1,2,3,4,'a','b',{'name':'root','job':'python',},} 17 Traceback (most recent call last): 18 File "<pyshell#102>", line 1, in <module> 19 se3 = {1,2,3,4,'a','b',{'name':'root','job':'python',},} 20 TypeError: unhashable type: 'dict' 21 22 >>> se4 = {1,2,3,4,'a','b',{'name','root','job','python',},} 23 Traceback (most recent call last): 24 File "<pyshell#103>", line 1, in <module> 25 se4 = {1,2,3,4,'a','b',{'name','root','job','python',},} 26 TypeError: unhashable type: 'set' 27 >>>
由上面可以看出,通过{}无法创建含有list/dict元素的set。
1 >>> l = [1,2,3,'a','b'] 2 >>> se = set(l) 3 >>> se 4 {1, 2, 3, 'a', 'b'} 5 6 >>> l = [1,2,3,'a','b',[5,6,],] 7 >>> se = set(l) 8 Traceback (most recent call last): 9 File "<pyshell#109>", line 1, in <module> 10 se = set(l) 11 TypeError: unhashable type: 'list' 12 13 >>> se = {1,3,5,'a',} 14 >>> se1 = set(se) 15 >>> se1 16 {1, 3, 'a', 5} 17 18 >>> d = {'name':'root','job':'python',} 19 >>> se = set(d) 20 >>> se 21 {'job', 'name'} 22 >>>
由上面可以看出,通过set()方法也只能接收一层list、dict、set等创建一个集合。且在把字典转换为集合时,只是把键名抽出来作为集合的元素。
集合方法:
1 #集合的内置方法 2 se = set() 3 4 add(x) 5 '''把元素x加入到集合中。若元素已存在也没影响,只留一个''' #这里添加只能添加不变数据类型的元素(hashable),可以添加元祖,其他list、dict、set都不行 6 remove(x) 7 '''从集合中删除x,若x不存在,返回一个KeyError''' 8 discard(x) 9 '''从集合中删除x,若x不存在,do notng''' 10 pop() 11 '''随机删除集合中的任意一个值,并返回。若为空集合,返回一个KeyError''' 12 clear() 13 '''清空整个集合的元素,留下空集合''' 14 copy() 15 '''返回一组浅拷贝''' 16 set1.union(set2) 17 '''收集两个集合中的所有元素,创建并返回一个新集合''' 18 set1.difference(set2) 19 '''根据一个集合中不存在于另一个集合中的元素,创建一个新集合,新集合元素为set1中元素''' 20 set1.difference_update(x) 21 '''删除集合set1中与迭代器x中值相等的元素( x 必须为可迭代对象),修改集合set1,返回None''' 22 set1.intersection(set2) 23 '''根据两集合中共有的元素创建一个新集合(求两个集合的交集)''' 24 set1.intersection_update(set2) 25 '''更新set1为两个集合的交集,set2不变''' 26 set1.isdisjoint(set2) 27 '''如果两个集合没有交集,则返回True''' 28 set1.issubset(set2) 29 '''判断set1是否是set2的子集,返回True or False''' 30 set1.issuperset(set2) 31 '''判断set1是否是set2的父集,返回True or False''' 32 set1.symmetric_difference(set2) 33 '''根据两个集合中所有不存在于对方的元素(去掉交集),创建并返回一个新集合''' 34 set1.symmetric_differencr_update(set2) 35 '''根据两个集合所有不存在于对方的元素(去掉交集),更新集合set1'''