http://heipark.iteye.com/blog/1743819

看下面代码,两个值相同的Item对象,添加到set中被认为是两个对象。

class Item(object):def __init__(self, foo, bar):self.foo = fooself.bar = bardef __repr__(self):return "Item(%s, %s)" % (self.foo, self.bar)print set([Item('1', '2'), Item('1', '2')])# 输出: set([Item(1, 2), Item(1, 2)])

数据结构中HASH表的设计思路是:

  1. 被插入元素根据hash值决定插入那个桶(通常一个数组)中
  2. 新插入元素根据的equals方法依次比较桶内元素,以确定是否已经存在

在python中如果我们自定义class,则需要添加__hash__和__eq__两个方法,前者用于决定当前元素在哪个桶,后者决定当前元素是否在桶中已经存在。

修改后的code如下:

class Item(object):def __init__(self, foo, bar):self.foo = fooself.bar = bardef __repr__(self):return "Item(%s, %s)" % (self.foo, self.bar)def __eq__(self, other):if isinstance(other, Item):return ((self.foo == other.foo) and (self.bar == other.bar))else:return Falsedef __hash__(self):return hash(self.foo + " " + self.bar)print set([Item('1', '2'), Item('1', '2')])# 输出:set([Item(1, 2)])

python中set集合如何决定是否重复?相关推荐

  1. Python中的集合

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

  2. python集合的概念_用Python中的集合Set讲解演示高一数学集合的概念

    数学编程不分家,用Python可以方便的表示高中数学知识.现在以集合为例进行讲解,高一数学设计集的概念,讲解了交并补的相关知识,用Python中的集合类型可以方便的表示.同时可以借助数学知识更好的理解 ...

  3. 站长在线零基础Python完全自学教程18:Python中的集合完全解读

    欢迎你来到站长学堂,学习站长在线出品的在线课程<零基础 Python完全自学教程>今天给大家分享的是第18课< Python中的集合完全解读>.本节课是一个大课,我分了这些知识 ...

  4. python中两个集合的运算并交补_三种方式实现 Python 中的集合的交、并、补运算...

    文章目录 三种方式实现 Python 中的集合的交.并.补运算 一 背景 集合这个概念在我们高中阶段就有所了解,毕业已多年,我们一起回顾一下几个集合相关的基本概念吧? 集合是指具有某种特定性质的具体的 ...

  5. 如何在Python中注释掉一段代码[重复]

    本文翻译自:How to comment out a block of code in Python [duplicate] This question already has an answer h ...

  6. python交并补符号_三种方式实现 Python 中的集合的交、并、补运算-阿里云开发者社区...

    三种方式实现 Python 中的集合的交.并.补运算 一 背景 集合这个概念在我们高中阶段就有所了解,毕业已多年,我们一起回顾一下几个集合相关的基本概念吧? 集合是指具有某种特定性质的具体的或抽象的对 ...

  7. python中的集合set类型是可变的吗_[Python] Python数据类型(三)集合类型之set集合和frozenset集合...

    1.集合基本概念 集合是0-n个对象引用的无序组合,集合中存储的元素不可重复,因此这些对象引用的引用的对象必须是可哈希运算的 .  1.python中提供了两种内置的集合类型:可变的set类型和固定的 ...

  8. 集合遍历python_遍历Python中的集合

    在本文中,我们将学习在Python 3.x中对集合进行遍历/遍历.或更早. 它是对象的无序集合,没有任何重复.这可以通过将所有元素括在花括号内来完成.我们还可以通过关键字" set" ...

  9. python集合类型的四种操作符_深入解析Python中的集合类型操作符

    (1)标准类型操作符(所有的集合类型) 成员关系 (in, not in) 就序列而言,Python中的in和not in操作符决定某个元素是否是一个集合中的成员. 集合等价/不等价 等价/不等价被用 ...

最新文章

  1. 清华团队将Transformer用到3D点云分割上后,效果好极了
  2. 职场笔记[0702]:用户体验和创业
  3. 如何在科研论文中画出漂亮的插图?(附代码)
  4. 计算机中丢失qt5svg,无法找到“Qt5Svg”提供了一个程序包配置文件
  5. RotateAnimation 实现表盘指针转动
  6. 现代密码学8.1--密码学所涉及的数论和群论
  7. HH SaaS电商系统的商品类目设计
  8. mysql封装 javabean,利用Java针对MySql封装的jdbc框架类JdbcUtils完整实现(包含增删改查、JavaBean反射原理,附源码)...
  9. access数据库文件导入mysql数据库文件怎么打开,Access数据库从外部数据导入文本文件和VF数据库-dbf文件怎么打开...
  10. 力扣538.把二叉搜索树转换为累加树(JavaScript)
  11. MyEclipse教程:Web开发——调试JSP
  12. AtomicLong并发编程
  13. 搭建Android/Linux驱动编译开发环境篇
  14. 如何写Java单元测试
  15. Wpf中使用OxyPlot制作图表
  16. 计算机英语2000带英标
  17. 开源或免费虚拟主机管理系统
  18. 什么是线程安全问题 及怎么解决线程安全问题
  19. 计算机科学家手抄报图片,关于简洁又漂亮的科学手抄报图片
  20. java快递管理系统

热门文章

  1. 八十八、Webpack打包工具
  2. pytorh 激活函数,循环神经网络层,损失函数和优化器
  3. CVPR 2022 | 利用域自适应思想,北大、字节跳动提出新型弱监督物体定位框架
  4. Facebook开源数据高效图像Transformer,媲美SOTA CNN
  5. SQuAD文本理解挑战赛十大模型解读
  6. android蓝牙查看电池容量_双麦降噪+高保真音效 QCY Air Bean真无线智能蓝牙耳机评测...
  7. python语法错误修改_python基础之错误、调试(异常处理)
  8. python编程题大全-python编程题
  9. mysql百万级性能瓶颈-数据库选型
  10. BugKuCTF WEB 域名解析