Python的set集合浅析
2016-04-22 13:04
477 查看
set是一个无序且不重复的元素集合
set的优点:访问速度快;天生解决重复问题
部分源码分析如下:
set的优点:访问速度快;天生解决重复问题
部分源码分析如下:
defadd(self,*args,**kwargs):#realsignatureunknown """ Addanelementtoaset. Thishasnoeffectiftheelementisalreadypresent. """ pass
#练习1.添加 s1=set() s1.add("11,22,33")#可以添加字符串和元组,不能添加列表,字典,每次只能添加一个 s1.add("kkkkkkkk") print(s1) s1.add("11,22,33")#添加重复字符串不生效 s1.add(("k1","v1")) print(s1) #执行结果: {'11,22,33','kkkkkkkk'} {'11,22,33','kkkkkkkk',('k1','v1')} 注意:另外一种方法可以添加列表,字典
s2=set([44,55,66,"aaa"])#感觉像是赋值,因为后面被覆盖了 print(s2) s2=set({"kk":"vv","jj":"oo"})#如果是字典取key print(s2) 执行结果: {66,'aaa',44,55} {'kk','jj'}
defclear(self,*args,**kwargs):#realsignatureunknown """Removeallelementsfromthisset.""" pass
#练习2.清空set集合 s1=set() s1.add("11,22,33")#可以添加字符串和元组,不能添加列表,字典,每次只能添加一个 print(s1) s1.clear()#清空set集合了 print(s1) #执行结果: {'11,22,33'} set()
defdifference(self,*args,**kwargs):#realsignatureunknown """ Returnthedifferenceoftwoormoresetsasanewset. (i.e.allelementsthatareinthissetbutnottheothers.) """ pass
#练习3.比较不同的部分放到新集合 s2=set(["aaa","bbb","ccc","ddd","aaa"]) print(s2) ret=s2.difference(["aaa","bbb","kkk"])#输出与指定集合不相同的部分放到新集合,无序 print(ret) 执行结果: {'aaa','ddd','bbb','ccc'} {'ccc','ddd'}
defdifference_update(self,*args,**kwargs):#realsignatureunknown """Removeallelementsofanothersetfromthisset.""" pass
#练习4.更新原有集合,移除相同部分 s2=set(["aaa","bbb","ccc","ddd","aaa"]) print(s2) ret=s2.difference_update(["aaa","bbb"])#更新原来的集合,移除相同部分,不生成集合 print(s2) print(ret)#不生成新集合,所以返回了None #执行结果: {'ddd','bbb','ccc','aaa'} {'ccc','ddd'} None
defdiscard(self,*args,**kwargs):#realsignatureunknown """ Removeanelementfromasetifitisamember. Iftheelementisnotamember,donothing. """ pass
#练习5.移除集合里的单个元素 s2=set(["aaa","bbb","ccc","ddd"]) print(s2) s2.discard("aaa")#移除一个元素,如果元素不存在,donothing print(s2) #执行结果: {'aaa','ccc','bbb','ddd'} {'ccc','bbb','ddd'}
defintersection(self,*args,**kwargs):#realsignatureunknown """ Returntheintersectionoftwosetsasanewset. (i.e.allelementsthatareinbothsets.) """ pass defintersection_update(self,*args,**kwargs):#realsignatureunknown """Updateasetwiththeintersectionofitselfandanother.""" pass
#练习6.取交集 s2=set(["aaa","bbb","ccc","ddd"]) print(s2) s3=s2.intersection(["aaa"])#原集合不变,取交集,并生成新集合 print(s3) s2.intersection_update(["aaa"])#更新原集合,移除原集合内容,放进交集 print(s2) 执行结果: {'ddd','bbb','ccc','aaa'} {'aaa'} {'aaa'}
defisdisjoint(self,*args,**kwargs):#realsignatureunknown """ReturnTrueiftwosetshaveanullintersection.""" pass
#练习6.判断是否有交集 s2=set(["aaa","bbb","ccc","ddd"]) s3=s2.isdisjoint(["aaa"])#有交集则返回False s4=s2.isdisjoint(["kkk"])#没交集则返回True print(s3) print(s4) #执行结果: False True
defissubset(self,*args,**kwargs):#realsignatureunknown """Reportwhetheranothersetcontainsthisset.""" pass defissuperset(self,*args,**kwargs):#realsignatureunknown """Reportwhetherthissetcontainsanotherset.""" pass
#练习7.判断父子集 s2=set(["aaa","bbb","ccc","ddd"]) s3=s2.issubset(["aaa"])#判断这个集合是否包含原集合,即判断原集合是否子集 s4=s2.issuperset(["aaa"])#判断原集合是否包含这个集合,即判断原集合是否父集 print(s3) print(s4) #执行结果: False True
defpop(self,*args,**kwargs):#realsignatureunknown """ Removeandreturnanarbitrarysetelement. RaisesKeyErrorifthesetisempty. """ pass defremove(self,*args,**kwargs):#realsignatureunknown """ Removeanelementfromaset;itmustbeamember. Iftheelementisnotamember,raiseaKeyError. """ pass
#练习8.随机删除和指定删除 s2=set(["aaa","bbb","ccc","ddd"]) s3=s2.pop()#随机删除集合中的一个元素 print(s2) s2=set(["aaa","bbb","ccc","ddd"]) s4=s2.remove("aaa")#指定删除集合中的一个元素 print(s2) #执行结果: {'ccc','ddd','aaa'} {'bbb','ccc','ddd'}
defsymmetric_difference(self,*args,**kwargs):#realsignatureunknown """ Returnthesymmetricdifferenceoftwosetsasanewset. (i.e.allelementsthatareinexactlyoneofthesets.) """ pass defsymmetric_difference_update(self,*args,**kwargs):#realsignatureunknown """Updateasetwiththesymmetricdifferenceofitselfandanother.""" pass
#练习9.差集 s2=set(["aaa","bbb","ccc","ddd"]) s3=s2.symmetric_difference(["aaa","kkk"])#差集,并生成新集合,与difference区别是,循环多了一次,因此差集最好与交集混合用 print(s3) s4=s2.symmetric_difference_update(["bbb"])#差集,在原集合中改变 print(s2) #执行结果: {'ccc','bbb','ddd','kkk'} {'aaa','ccc','ddd'}
defunion(self,*args,**kwargs):#realsignatureunknown """ Returntheunionofsetsasanewset. (i.e.allelementsthatareineitherset.) """ pass defupdate(self,*args,**kwargs):#realsignatureunknown """Updateasetwiththeunionofitselfandothers.""" pass
#练习10.并集和更新 s2=set(["aaa","bbb","ccc","ddd"]) s3=s2.union(["aaa","kkk"])#并集,并生成新集合 print(s3) s4=s2.update(["bbb","jjj"])#更新,在原集合中改变 print(s2) #执行结果: {'ccc','aaa','bbb','ddd','kkk'} {'ccc','aaa','bbb','ddd','jjj'}
相关文章推荐
- Python编程技巧(一)
- Python 开发安卓Android及IOS应用库Kivy安装尝试
- python解析pcap转储为sqlite
- Python文件操作
- 学习大数据第一天:IPython安装
- 28款Python GUI开发框架开源软件
- python urllib、urlparse、urllib2、cookielib
- python之HTMLParser解析HTML文档
- 步步学习Python 编程error篇:import package error:Import error: No module named mayavi
- Python开发之快速搭建自动回复微信公众号功能
- python学习笔记之numpy入门
- Python命令行添加Tab键自动补全功能
- How to overcome “datetime.datetime not JSON serializable” in python?
- NumPy简明教程
- python中用来提醒自己的小知识点
- Python爬虫入门笔记:爬虫简介
- Python scrapy学习入门
- Python用pip 安装lxml时出现 “Unable to find vcvarsall.bat ”解决方案
- Fabric集群简单部署
- python中requests爬去网页内容出现乱码的解决方案