python 数据结构

在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'''
原文地址:https://www.cnblogs.com/xtsec/p/6602771.html