day①:集合
2015-12-29 17:01
274 查看
集合
python的set和其它语言类似,是一个无序不重复元素集,基本功能包括关系测试和消除重复元素,集合对象还支持union(联合),intersection(交),difference(差)和sysmmetricdifference(对称差集)等数学运算。
优点:
访问速度快
天生解决了重复问题
例子:
稍稍记住:
s.union(t)=s|t:s和t的并集
s.intersection(t)=s&t:s和t的交集
s.difference(t)=s-t:差集(在s,不在t)
s.symmetric_difference(t)=s^t:对称差集(在t或s中,但不会同时出现在二者中,包含s和t中不重复的元素)
二.某些方法例子:
(1)difference、difference_update
例子:
(2)intersection、intersection_update
例子:
(3)isdisjoint
(4)issubset、issuperset
例子:
(5)pop、remove
例子:
(7)difference、symetric_difference
例子:
end
python的set和其它语言类似,是一个无序不重复元素集,基本功能包括关系测试和消除重复元素,集合对象还支持union(联合),intersection(交),difference(差)和sysmmetricdifference(对称差集)等数学运算。
优点:
访问速度快
天生解决了重复问题
例子:
>>>s=set([1,2,3,4])#创建一个数值集合 >>>s set([1,2,3,4]) >>>t=set("Hello")#创建一个唯一字符的集合 与列表和元组不同,集合是无序的,也无法通过数字进行索引,而且集合里面的元素不能重复 >>>t set(['H','e','l','o'])#发现只出现了一个l >>>a=t|s#t和s的并集 >>>a set([1,2,3,'e','H','l','o',4]) >>>b=t&s#t和s的交集 >>>b set([]) >>>c=t-s#求差集(在t,不在s) >>>c set(['H','e','l','o']) >>>d=t^s#对称差集(在t或s中,但不会同事出现在二者中) >>>d set([1,2,3,4,'H','l','o','e']) >>>t set(['H','e','l','o']) ###基本操作 >>>t.add('a')#添加一项 >>>t set(['a','H','e','l','o']) >>>s set([1,2,3,4]) >>>s.update([90,34,53])#在s中添加多项 >>>s set([1,34,3,4,2,53,90]) >>>t set(['a','H','e','l','o']) >>>t.remove('e')#删除 >>>t set(['a','H','l','o']) >>>len(s)#set的长度 7 >>>len(t)#set的长度 4 >>>53ins#测试x是否是s的成员 True >>>2ins#测试x是否是s的成员 True >>>20ins#测试x是否不是s的成员 False >>>s.discard(90)#如果set中存在“90”元素,则删除 >>>s set([1,34,3,4,2,53]) >>>s.pop()#删除并且返回集合中一个不确定的元素,如果集合空,则引发KeyError 1 >>>s set([34,3,4,2,53]) >>>s.pop() 34 >>>s set([3,4,2,53]) >>>s.pop() 3 >>>s set([4,2,53]) >>>s.pop() 4 >>>s set([2,53]) ##为啥我测试每次都是删第一个元素的呢? >>>s.clear()#删除集合里的所有元素 >>>s set([]) >>>s=set([1,34,3,4,2,53,90]) >>>s set([1,34,3,4,2,53,90]) >>>t set(['a','H','l','o']) >>>s<=t#测试是否s中的每一个元素都在t中(s.issubset(t)) False >>>s>=t#测试是否t中的每一个元素都在s中(s.issuperset(t)) False >>>s.union(t)#返回一个新的set,包含s和t中的每一个元素(s|t) set(['a',1,34,3,4,'H',2,'o','l',53,90]) >>>s.intersection(t)#返回一个新的set,包含s和t中的公共元素(s&t) set([]) >>>s.difference(t)#返回一个新的set,包含s中有但是t中没有的元素(s-t) set([1,34,3,4,2,53,90]) >>>s.symmetric_difference(t)#返回一个新的set,包含s和t中不重复的元素(s^t) set(['a',1,34,3,4,'H',2,'l','o',53,90]) >>>new_set=s.copy#返回set的一个浅复制 >>>new_set <built-inmethodcopyofsetobjectat0x7ffe1dab7ed0>
稍稍记住:
s.union(t)=s|t:s和t的并集
s.intersection(t)=s&t:s和t的交集
s.difference(t)=s-t:差集(在s,不在t)
s.symmetric_difference(t)=s^t:对称差集(在t或s中,但不会同时出现在二者中,包含s和t中不重复的元素)
二.某些方法例子:
(1)difference、difference_update
defdifference(self,*args,**kwargs):#realsignatureunknown """ Returnthedifferenceoftwoormoresetsasanewset. (i.e.allelementsthatareinthissetbutnottheothers.) """ pass defdifference_update(self,*args,**kwargs):#realsignatureunknown
"""删除当前set中的所有包含在newset里的元素""" """Removeallelementsofanothersetfromthisset.""" pass
例子:
>>>s1 set(['hy','alex','yaobin']) >>>s2 set(['test2','hehe','hy','alex','yaobin']) >>>s4=s2.difference(s1) >>>s1 set(['hy','alex','yaobin']) >>>s2 set(['test2','hehe','hy','alex','yaobin']) >>>s4#生成一个新的集合! set(['test2','hehe']) >>> >>> >>>s1 set(['hy','alex','yaobin']) >>>s2 set(['test2','hehe','hy','alex','yaobin']) >>>s5=s2.difference_update(s1) >>>s1 set(['hy','alex','yaobin']) >>>s2#把s1存在s2的元素清了! set(['test2','hehe']) >>>s5#没有生成新的集合! >>>prints5 None
(2)intersection、intersection_update
defintersection(self,*args,**kwargs):#realsignatureunknown """取交集,新创建一个set""" """ Returntheintersectionoftwoormoresetsasanewset. (i.e.elementsthatarecommontoallofthesets.) """ pass defintersection_update(self,*args,**kwargs):#realsignatureunknown """取交集,修改原来set""" """Updateasetwiththeintersectionofitselfandanother.""" pass
例子:
>>>s1 set(['hy','alex','yaobin']) >>>s2 set(['alex','hy','test2','hehe','yaobin']) >>>s3=s2.intersection(s1) >>>s3#生成一个新的集合 set(['hy','alex','yaobin']) >>> >>> >>>s1 set(['hy','alex','yaobin']) >>>s2 set(['alex','hy','test2','hehe','yaobin']) >>>s4=s2.intersection_update(s1) >>>s4 >>>prints4#没有生成一个新的集合 None >>>s1 set(['hy','alex','yaobin']) >>>s2#修改s2去了! set(['hy','alex','yaobin'])
(3)isdisjoint
defisdisjoint(self,*args,**kwargs):#realsignatureunknown """如果没有交集,返回true""" """ReturnTrueiftwosetshaveanullintersection.""" pass 例子:
>>>s1 set(['hy','alex','yaobin']) >>>s2 set(['hy','alex','yaobin']) >>>s1.isdisjoint(s2) False >>>s2=set(['a','b','c']) >>>s1.isdisjoint(s2) True
(4)issubset、issuperset
defissubset(self,*args,**kwargs):#realsignatureunknown """是否是子集""" """Reportwhetheranothersetcontainsthisset.""" pass defissuperset(self,*args,**kwargs):#realsignatureunknown """是否是父集""" """Reportwhetherthissetcontainsanotherset.""" pass
例子:
>>>s1 set(['hy','alex','yaobin']) >>>s2 set(['haha','hy','alex','hehe','yaobin']) >>>s1.issubset(s2) True >>> >>> >>>s2.issuperset(s1) True
(5)pop、remove
defpop(self,*args,**kwargs):#realsignatureunknown """移除""" """ Removeandreturnanarbitrarysetelement. RaisesKeyErrorifthesetisempty. """ pass defremove(self,*args,**kwargs):#realsignatureunknown """移除""" """ Removeanelementfromaset;itmustbeamember. Iftheelementisnotamember,raiseaKeyError. """ pass 例子:
>>>s1 set(['hy','alex','yaobin']) >>>s2 set(['haha','hy','alex','hehe','yaobin']) >>>s2.pop()#pop可以拿一个元素,可以赋值给你定义的xxx 'haha' >>>s2 set(['hy','alex','hehe','yaobin']) >>>s2.remove() Traceback(mostrecentcalllast): File"<stdin>",line1,in<module> TypeError:remove()takesexactlyoneargument(0given) >>>s2.remove('hy')#要指定元素 >>>s2 set(['alex','hehe','yaobin'])
(6)symmetric_difference、symmetric_difference_update
defsymmetric_difference(self,*args,**kwargs):#realsignatureunknown
"""对称差集,创建新对象"""
"""
Returnthesymmetricdifferenceoftwosetsasanewset.
(i.e.allelementsthatareinexactlyoneofthesets.)
"""
pass
defsymmetric_difference_update(self,*args,**kwargs):#realsignatureunknown
"""对称差集,改变原来"""
"""Updateasetwiththesymmetricdifferenceofitselfandanother."""
pass
例子:
>>>s1
set(['hehe','hy','alex'])
>>>s2
set(['hehe','yaobin'])
>>>s2.symmetric_difference(s1)
set(['alex','hy','yaobin'])
>>>s1
set(['hehe','hy','alex'])
>>>s2#没变
set(['hehe','yaobin'])
>>>
>>>
>>>s2.symmetric_difference_update(s1)
>>>s1
set(['hehe','hy','alex'])
>>>s2#变了
set(['hy','alex','yaobin'])
>>>
(7)difference、symetric_difference
defdifference(self,*args,**kwargs):#realsignatureunknown
"""
Returnthedifferenceoftwoormoresetsasanewset.
(i.e.allelementsthatareinthissetbutnottheothers.)
"""
pass
defsymmetric_difference(self,*args,**kwargs):#realsignatureunknown
"""对称差集,创建新对象"""
"""
Returnthesymmetricdifferenceoftwosetsasanewset.
(i.e.allelementsthatareinexactlyoneofthesets.)
"""
pass
例子:
s1=set([11,22,33])
s2=set([22,44])
ret1=s1.difference(s2)
ret2=s1.symmetric_difference(s2)
printret1
printret2
结果:
set([33,11])
set([33,11,44])
解析:
可以理解为:ret1,先循环s1,判断不在s2的
ret2,先循环s1,判断不在s2的,后循环s2,判断不在s1的
end
相关文章推荐
- 如何在局域网内部署服务器监控 ?
- 输出变量的赋值符_连接符_占位符
- vxworks 信号量
- html写移动端时的网页自适应问题
- Android Handler
- HttpUrlConnection 下的post, get , 和图片下载(工具类)
- Git Server for Windows 环境搭建
- Xcode多渠道自动化打包
- 绝对详细!Nginx基本配置、性能优化指南
- UIScrollView做图片缩放
- OSX 安装brew
- 假如你想成为全栈工程师……
- zzulioj--1719--小胖的疑惑(整数划分+dp打表)
- IOS学习笔记——iOS组件之UIScrollView详解
- phonegap(cordova)安装配置
- Android Studio 导入module
- Create a Base Image
- 使用NSURLCache为NSURLRequest设置缓存
- zzulioj--1719--小胖的疑惑(整数划分+dp打表)
- Short s1=1; s1=s1+1;会报错吗,编译错误还是运行时错误