面向对象的集合:

  1. #coding:utf-8
  2. __author__ = 'similarface'
  3. class Set:
  4. '''
  5. list实现集合,及其集合操作
  6. '''
  7. def __init__(self,value=[]):
  8. self.data=[]
  9. self.concat(value)
  10.  
  11. def intersect(self,other):
  12. '''
  13. 集合交集操作
  14. :param other:
  15. :return:交集
  16. '''
  17. res=[]
  18. for x in self.data:
  19. #x in 会调用__getitem__
  20. if x in other:
  21. res.append(x)
  22. return Set(res)
  23.  
  24. def union(self,other):
  25. '''
  26. 集合并集操作
  27. :param other:
  28. :return:并集
  29. '''
  30. #复制自身的一个列表
  31. res=self.data[:]
  32. for x in other:
  33. if not x in res:
  34. res.append(x)
  35. return Set(res)
  36.  
  37. def concat(self,value):
  38. for x in value:
  39. if not x in self.data:
  40. self.data.append(x)
  41.  
  42. def __len__(self):
  43. return len(self.data)
  44.  
  45. def __getitem__(self, item):
  46. return self.data[item]
  47.  
  48. def __and__(self, other):
  49. return self.intersect(other)
  50.  
  51. def __or__(self, other):
  52. return self.union(other)
  53.  
  54. def __repr__(self):
  55. return '<Set:'+repr(self.data)+'>'
  56.  
  57. if __name__=="__main__":
  58. users1=Set(['jpan','ch','en'])
  59. users2=Set(['ta','ch','hk'])
  60. a=users1 & users2
  61. b=users1 | users2
  62.  
  63. tf='ch' in users1
  64. a.data
  65. b.data
  66.  
  67. #coding:utf-8
  68. __author__ = 'similarface'
  69. from DataStruct.set import Set
  70. '''
  71. 使用字典将集合性能优化为线性的 该类继承上面的Set类
  1. '''
  2. class Set(Set):
  3. def __init__(self,value=[]):
  4. self.data={}
  5. self.concat(value)
  6.  
  7. def concat(self,value):
  8. for x in value:
  9. self.data[x]=None
  10.  
  11. def intersect(self,other):
  12. '''
  13. 求交集操作
  14. :param other:
  15. :return:交集
  16. '''
  17. res={}
  18. for x in other:
  19. if x in self.data:
  20. res[x]=None
  21. return Set(res.keys())
  22.  
  23. def union(self,other):
  24. '''
  25. 求并集操作
  26. :param other:
  27. :return:并集
  28. '''
  29. res={}
  30. for x in other:
  31. res[x]=None
  32. for x in self.data.keys():
  33. res[x]=None
  34. return Set(res.keys())
  35.  
  36. def __getitem__(self, item):
  37. return list(self.data.keys())[item]
  38.  
  39. def __repr__(self):
  40. return '<Set:%r>' % list(self.data.keys())
  41.  
  42. if __name__=="__main__":
  43. users1=Set(['jpan','ch','en'])
  44. users2=Set(['ta','ch','hk'])
  45. a=users1 & users2
  46. b=users1 | users2
  47.  
  48. tf='ch' in users1
  49. a.data
  50. b.data

python 集合的更多相关文章

  1. Python 集合set添加删除、交集、并集、集合操作符号

    在Python中集合set是基本数据类型的一种,它有可变集合(set)和不可变集合(frozenset)两种.创建集合set.集合set添加.集合删除.交集.并集.差集的操作都是非常实用的方法. 1. ...

  2. [转]python集合set

    Python中集合set是基本数据类型的一种,它有可变集合(set)和不可变集合(frozenset)两种.创建集合set.集合set添加.集合删除.交集.并集.差集的操作都是非常实用的方法. 来源网 ...

  3. python集合使用范例的代码

    在代码过程中中,将代码过程中比较好的代码段珍藏起来,如下的代码是关于python集合使用范例的代码,希望能对大伙有用. # sets are unordered collections of uniq ...

  4. python集合与字典的用法

    python集合与字典的用法 集合: 1.增加  add 2.删除   •del 删除集合 •discard(常用)删除集合中的元素  #删除一个不存在的元素不会报错 •remove 删除一个不存在的 ...

  5. Python 集合内置函数大全(非常全!)

    Python集合内置函数操作大全 集合(s).方法名 等价符号 方法说明 s.issubset(t) s <= t 子集测试(允许不严格意义上的子集):s 中所有的元素都是 t 的成员   s ...

  6. Python 集合set()添加删除、交集、并集、集合操作详解

    集合:一个集合中,任何两个元素都认为是不相同的,即每个元素只能出现一次.每个元素的地位都是相同的,元素之间是无序的. 创建集合set python set类是在python的sets模块中,大家现在使 ...

  7. python集合可以进行相减

    python集合可以进行相减 student = {'tom','jim','mary','tom','jack','rose'} print(student) print('rose' in stu ...

  8. Python集合类型的操作与应用

    Python集合类型的操作与应用 一.Python集合类型 Python中的集合类型是一个包含0个或多个数据项的无序的.不重复的数据组合,其中,元素类型只能是固定数据类型,如整数.浮点数.字符串.元组 ...

  9. Python - 集合 - 第十一天

    Python 集合 集合(set)是一个无序的不重复元素序列. 可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建 ...

  10. python集合set,交集,并集,差集,对称差集,子集和超集

    python集合set,交集,并集,差集,对称差集,子集和超集 x = {1, 2, 3, 4} y = {2, 4, 5, 6} # 交集(取x中与y中相同部分) print(x.intersect ...

随机推荐

  1. Python科学计算环境推荐——Anaconda

    最近在用Python做中文自然语言处理.使用的IDE是PyCharm.PyCharm确实是Python开发之首选,但用于科学计算方面,还略有欠缺.为此我尝试过Enthought Canopy,但Can ...

  2. POJ Sky Code 莫比乌斯反演

    N. Sky Code Time Limit: 1000ms Case Time Limit: 1000ms Memory Limit: 65536KB   64-bit integer IO for ...

  3. Winform容器标签 打印标签 对话框控件

    一.容器标签 布局: Anchor:锁定位置,指定与窗口容器的边缘位置,会随着窗口大小的改变而改变: Dock:填充窗口的位置.一般与容器标签同时使用. 1.Panel:对控件进行分组.可以独立布局, ...

  4. C#获取当前页面的url

    C#获取当前页面的url string a= Request.ApplicationPath; // / string b = Request.CurrentExecutionFilePath; // ...

  5. HDU4549 M斐波那契数列 矩阵快速幂+欧拉函数+欧拉定理

    M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Sub ...

  6. AOD.net

    ADO.NET中的五个主要对象 Connection 物件Connection 对象主要是开启程序和数据库之间的连结.没有利用连结对象将数据库打开,是无法从数据库中取得数据的.这个物件在ADO.NET ...

  7. CodeForces 552C Vanya and Scales

    Vanya and Scales Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u S ...

  8. Maven 3.3.9在Windows上的安装

    开始学Maven了,可是我一个项目都木有做过.听过Maven 的大名,用来构建项目的. 下面记录下我安装Maven的过程 1.确认电脑上安装了JDK 在cmd下执行下列命令: java –versio ...

  9. iOS添加广告的主要方法

    //用户取消正在执行的广告时 调用 - (void)cancelBannerViewAction { NSLog(@"Banner was cancelled!"); self.a ...

  10. poj 3304线段与直线相交

    http://poj.org/problem?id=3304 Segments Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: ...