Python 中集合和字典的形式相似,可以看作只有键值的字典。

存储方式:

  以Hash表进行存储,典型的以空间换时间的策略。

定义方式:

  空字典:d = {} 或者 d = set()

  带初始值:d = {‘a’,  'b':} 

特性:

  (1)集合为可变类型,其内部元素可动态修改(增删改)

  (2)如果key值重复,后面的数据将覆盖前面的数据。

  (3)Python中所有的类型都能进行结合存储,因为Python中一切皆对象,所有对象都有默认的hash算法和比较算法

  (4)Python 中非基础类型的对象作为key时,将根据对象的地址进行hash和比较运行。

  (5)支持常用内置方法(cmp, len, str)等

  (6)集合更像数学容器,支持并集,交集等运算

集合的数学运算:

d1 = {1, 2, 3}
d2 = {2, 3, 4, 5}
d1.union(d2) # 并集 {1, 2, 3, 4, 5}
d1.intersection(d2) # 交集 {2, 3}
d1.symmetric_difference(d2) # 差集{1, 4, 5}
d1.difference(d2) # 差集(d1存在,d2不存在){1}
d2.difference(d1) # 差集(d2存在,d1不存在){4, 5}
d1 & d2 # 交集, 同intersection {2, 3}
d1 | d2 # 并集,同union {1, 2, 3, 4, 5}

常用方法:

d1 = {1, 2, 3}  
d1.add(4) # 给集合添加一个元素
d1.remove(1) # 删除元素1
d1.pop() # 删除最后一个元素
d1.update({2, 3, 4}) # 用{2,3,4}更新集合,结果为d1 = {2,3, 4}
d1.copy() # 浅拷贝一份d1

自定义Hash

Python 非基础类型的hash和比较算法是基于实例的地址进行计算的,对于自定义类,每个实例对象都将成员其一个元素。

 

现在我需要通过x值进行比较,如果x值相同则认为两个实例相同,怎么实现?

答:重载类的__hash__算法和__eq__(或者__cmp__)算法即可。

 
posted on 2020-08-22 19:20  lwp-boy  阅读(250)  评论(0编辑  收藏  举报