您的位置:首页 > 编程语言 > Python开发

Python的set集合浅析

2016-04-22 13:04 477 查看
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'}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: