面向對象的集合:#coding:utf-8__author__ = 'similarface'class Set: ''' list實現集合,及其集合操作 ''' def __init__(self,value=[]): self.data=[] ...
面向對象的集合:
#coding:utf-8 __author__ = 'similarface' class Set: ''' list實現集合,及其集合操作 ''' def __init__(self,value=[]): self.data=[] self.concat(value) def intersect(self,other): ''' 集合交集操作 :param other: :return:交集 ''' res=[] for x in self.data: #x in 會調用__getitem__ if x in other: res.append(x) return Set(res) def union(self,other): ''' 集合併集操作 :param other: :return:並集 ''' #複製自身的一個列表 res=self.data[:] for x in other: if not x in res: res.append(x) return Set(res) def concat(self,value): for x in value: if not x in self.data: self.data.append(x) def __len__(self): return len(self.data) def __getitem__(self, item): return self.data[item] def __and__(self, other): return self.intersect(other) def __or__(self, other): return self.union(other) def __repr__(self): return '<Set:'+repr(self.data)+'>' if __name__=="__main__": users1=Set(['jpan','ch','en']) users2=Set(['ta','ch','hk']) a=users1 & users2 b=users1 | users2 tf='ch' in users1 a.data b.data #coding:utf-8 __author__ = 'similarface' from DataStruct.set import Set ''' 使用字典將集合性能優化為線性的 該類繼承上面的Set類
''' class Set(Set): def __init__(self,value=[]): self.data={} self.concat(value) def concat(self,value): for x in value: self.data[x]=None def intersect(self,other): ''' 求交集操作 :param other: :return:交集 ''' res={} for x in other: if x in self.data: res[x]=None return Set(res.keys()) def union(self,other): ''' 求並集操作 :param other: :return:並集 ''' res={} for x in other: res[x]=None for x in self.data.keys(): res[x]=None return Set(res.keys()) def __getitem__(self, item): return list(self.data.keys())[item] def __repr__(self): return '<Set:%r>' % list(self.data.keys()) if __name__=="__main__": users1=Set(['jpan','ch','en']) users2=Set(['ta','ch','hk']) a=users1 & users2 b=users1 | users2 tf='ch' in users1 a.data b.data