集合
概念:
set集合是python中一种基本数据类型,分为可变集合和不可变集合两种。集合是无序不重复元素集,包括创建集合set,向集合中添加元素,删除集合中的元素,求集合的交集,并集,差集等操作。
可变集合:需要的参数必须是迭代器类型,如序列,字典,然后转换成无序不重复的元素集。由于集合是不重复的,所以可以对字符串,列表,元素进行去重操作。
不可变集合:集合中的元素不可以被改变,不能做插入和删除操作,其他方法和可变集合基本相同。
1、创建集合:
创建空集合:
s=set()ss=set([])st=set(())
创建非空集合:参数必须是序列(字符串,列表,元素),字典,不能是数值类型
#字符串做参数s1=set('hellopython')print (s1)#列表做参数s2=set([1,2,3,4])print (s2)#元素做参数s3=set((1,2,3,4))print (s3)#字典做参数s4=set({ 'name':'cwx','age':18})print(s4) #set集合做参数s5=set(s3)print (s3)
注意:字典转set集合,只取字典的key,相当于将字典中的dict.keys()列表转化成set集合。
2、添加集合元素(add,update)
add():将要添加的元素作为一个整体添加到集合中。
update():把要传入的元素拆分成单个字符,存于集合中,并去掉重复的
#add添加元素,作为一个整体添加到集合中sTest=set('one')sTest.add('Two')print ('add添加后的元素',sTest)#update添加元素,拆分单个字符,去掉重复字符sTest1=set('one')sTest1.update('Two')print ('update添加后的元素',sTest1) 运行结果: add添加后的元素 {'Two', 'e', 'o', 'n'} update添加后的元素 {'e', 'w', 'T', 'o', 'n'}
3、删除集合的元素(remove、discard、pop)
remove:确保元素存在,不存在则抛出KeyError异常
sTest=set('helloy')sTest.remove('y')print ('删除后的集合是:',sTest)
sTest.remove('a') print ('删除后的集合是:',sTest) 运行结果: 删除后的集合是: {'e', 'l', 'h', 'o'} Traceback (most recent call last): File "E:/workplace/2019pratice/practice1.py", line 456, insTest.remove('a') KeyError: 'a'
discard:如果元素存在则删除,如果不存在则什么也没做,该函数没有返回值
sTest=set('helloy')sTest.discard('y')print ('discard删除元素后的集合',sTest) #元素存在则删除sTest.discard('a')print ('discard删除元素后的集合',sTest) #元素不存在什么也没做
pop:随机删除集合中的某个元素,如集合为空则抛出KeyError异常
sTest=set('helloy')sTest.pop()print ('pop删除元素后的集合',sTest) #随机删除集合中的元素sTest1=set()sTest1.pop()print ('pop删除元素后的集合',sTest) #集合为空则抛出KeyError异常 运行结果: pop删除元素后的集合 {'l', 'h', 'y', 'o'} File "E:/workplace/2019pratice/practice1.py", line 464, insTest1.pop() KeyError: 'pop from an empty set'
clear:清空集合元素
sTest=set('helloy')sTest.clear()print ('清空后的集合是',sTest) 运行结果: 清空后的集合是 set()
5、遍历集合
#for遍历集合元素 sTest = set(['e', 'two', 'o', 'n', '1', '3', '2'])for i in sTest: print (i) 运行结果: 2 n 3 1 e o two
# 带索引序号的遍历:sTest = set(['e', 'two', 'o', 'n', '1', '3', '2'])for index,elem in enumerate(sTest): print ('元素的索引是',index,'对应的元素是',elem) 运行结果: 元素的索引是 0 对应的元素是 e 元素的索引是 1 对应的元素是 o 元素的索引是 2 对应的元素是 3 元素的索引是 3 对应的元素是 1 元素的索引是 4 对应的元素是 n 元素的索引是 5 对应的元素是 two 元素的索引是 6 对应的元素是 2
6、集合与序列(字符串,列表,元素)间的转换:(序列转集合,重复会被去掉)
集合与字符串的转换:
testStr = 'python is good'# 字符串转集合st=set(testStr)print ('字符串转集合后:',st)# 集合转字符串,str()s=str(st)print ('集合转字符串后:',s)# 集合转字符串,join()s1=''.join(st)print (s1)运行结果:字符串转集合后: { 'o', 'p', 'y', 's', 't', 'd', 'h', 'i', 'n', ' ', 'g'}集合转字符串后: { 'o', 'p', 'y', 's', 't', 'd', 'h', 'i', 'n', ' ', 'g'}opystdhin g
集合与列表的转换:
listTest = [1, 2, 3, 2, 'a', 'b']# 列表转集合slist=set(listTest)print ('列表转集合:',slist)# 集合转列表list1=list(slist)print ('集合转列表:',list1) 运行结果: 列表转集合: {'a', 1, 2, 3, 'b'} 集合转列表: ['a', 1, 2, 3, 'b']
集合与元组的转换:
tupTest = (1, 2, 3, 2, 'a', 'b')# 元组转集合stupe=set(tupTest)print ('列表转集合:',stupe)# 集合转元组tupe1=tuple(stupe)print ('集合转元组:',tupe1)运行结果:列表转集合: { 1, 2, 3, 'a', 'b'}集合转元组: (1, 2, 3, 'a', 'b')
练习:结合set对象,列表某个list中所有元素出现的个数
listB=['a','b','c','a','b','a']for i in set(listB): print (i,'出现%d次'%listB.count(i))运行结果:a 出现3次c 出现1次b 出现2次
7、集合间的操作:交集(&)、并集(|)、差集(-)
交集(&):两个集合共同元素组成的集合
s1=set([1,2,3])s2=set([1,3,4,5])print ('两个集合的交集是',s1&s2) #交集运行结果:两个集合的交集是 { 1, 3}
并集(|):两个集合所有的,并去掉重复的元素组成的集合
s1=set([1,2,3])s2=set([1,3,4,5])print ('两个集合的并集是',s1|s2) #并集运行结果:两个集合的并集是 { 1, 2, 3, 4, 5}
差集(-):在集合1但不在集合2中组成的集合
s1=set([1,2,3])s2=set([1,3,4,5])print ('两个集合的差集是',s1-s2) #差集运行结果:两个集合的差集是 { 2}
8、集合间的运算: >、<、、>=、<=、!=、==(==:判断一个集合是否完全包含另一个集合)
s1=set([1,2,3])s2=set([1,2,3,4,5])print (s1>s2)print (s1
判断父亲集合函数:issuperset(),等同于>符号
判断是否是子集函数:issubset(),等同于<符号
s1=set([1,2,3])s2=set([1,3,4,5])s3=set([1,3])print (s2.issuperset(s3))print (s3.issubset(s2))print (s2.issuperset(s1))print (s1.issubset(s2))运行结果:TrueTrueFalseFalse