python中的set实现不重复的排序原理


Posted in Python onJanuary 24, 2018

最近在尝试写选课系统的时候遇到一个问题:

1、存在两个类 School、Teacher ;

2、School实例中包含多个Teacher的实例,但又不可重复

本人想到在School中用set()存储,但是添加Teacher实例的时候做不到去重,后来猜测应该是set会自动调用__eq__方法比较对象是否重复,因此重写了该方法:

def __eq__(self, other):
  return self.name == other.name

 

结果仍然报错TypeError: unhashable type,如下:

python中的set实现不重复的排序原理

研究了很久,发现Teacher无法hash的原因是该类中缺少__hash__方法,导致解释器不知道如何哈希该对象,添加以下代码后问题解决:

def __hash__(self):
    return hash(self.name)

综上发现:

如果想要将对象用set去重,需要重写__eq__和__hash__两个方法。

总结

以上所述是小编给大家介绍的python中的set实现不重复的排序原理,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
Python类的基础入门知识
Nov 24 Python
python回调函数的使用方法
Jan 23 Python
Python实现批量把SVG格式转成png、pdf格式的代码分享
Aug 21 Python
python创建列表并给列表赋初始值的方法
Jul 28 Python
TensorFlow saver指定变量的存取
Mar 10 Python
python中cPickle类使用方法详解
Aug 27 Python
对python读写文件去重、RE、set的使用详解
Dec 11 Python
Python面向对象程序设计之类的定义与继承简单示例
Mar 18 Python
numpy.random.shuffle打乱顺序函数的实现
Sep 10 Python
解决python脚本中error: unrecognized arguments: True错误
Apr 20 Python
PyCharm 2020.2.2 x64 下载并安装的详细教程
Oct 15 Python
Python xlwings插入Excel图片的实现方法
Feb 26 Python
详解Python之unittest单元测试代码
Jan 24 #Python
python爬取拉勾网职位数据的方法
Jan 24 #Python
学习Python3 Dlib19.7进行人脸面部识别
Jan 24 #Python
Python实现的生成格雷码功能示例
Jan 24 #Python
Python使用requests及BeautifulSoup构建爬虫实例代码
Jan 24 #Python
Python3结合Dlib实现人脸识别和剪切
Jan 24 #Python
深入浅析Python中的yield关键字
Jan 24 #Python
You might like
解决CodeIgniter伪静态失效
2014/06/09 PHP
php 批量查询搜狗sogou代码分享
2015/05/17 PHP
详谈配置phpstorm完美支持Codeigniter(CI)代码自动完成(代码提示)
2017/04/07 PHP
JS+PHP实现用户输入数字后显示最大的值及所在位置
2017/06/19 PHP
Laravel学习教程之本地化模块
2017/08/18 PHP
PHP多进程编程之僵尸进程问题的理解
2017/10/15 PHP
thinkphp框架类库扩展操作示例
2019/11/26 PHP
javascript实现的listview效果
2007/04/28 Javascript
XML的代替者----JSON
2007/07/21 Javascript
几个比较经典常用的jQuery小技巧
2010/03/01 Javascript
JS字符串函数扩展代码
2011/09/13 Javascript
JQuery魔力之$("tagName")与selector
2012/03/05 Javascript
js解决弹窗问题实现班级跳转DIV示例
2014/01/06 Javascript
javascript实现的简单的表单验证
2015/07/10 Javascript
第一次接触神奇的Bootstrap菜单和导航
2016/08/01 Javascript
javascript事件捕获机制【深入分析IE和DOM中的事件模型】
2016/12/15 Javascript
jQuery点击头像上传并预览图片
2017/02/23 Javascript
jQuery插件之validation插件
2017/03/29 jQuery
细说webpack源码之compile流程-rules参数处理技巧(2)
2017/12/26 Javascript
在vue中实现echarts随窗体变化
2020/07/27 Javascript
[01:10:03]OG vs EG 2018国际邀请赛淘汰赛BO3 第三场 8.23
2018/08/24 DOTA
[00:43]拉比克至宝魔导师密钥展示
2018/12/20 DOTA
python实现DEM数据的阴影生成的方法
2019/07/23 Python
Django框架 信号调度原理解析
2019/09/04 Python
python next()和iter()函数原理解析
2020/02/07 Python
pymysql 插入数据 转义处理方式
2020/03/02 Python
用python按照图像灰度值统计并筛选图片的操作(PIL,shutil,os)
2020/06/04 Python
python能在浏览器能运行吗
2020/06/17 Python
python 实时调取摄像头的示例代码
2020/11/25 Python
HTML5中的Web Notification桌面通知功能的实现方法
2019/07/29 HTML / CSS
全球采购的街头服饰和帽子:Urban Excess
2020/10/28 全球购物
教师校本培训方案
2014/02/26 职场文书
党员廉洁自律承诺书
2014/05/26 职场文书
多媒体编辑专业毕业生求职信
2014/06/13 职场文书
关于党风廉政建设宣传教育月的活动总结!
2019/08/08 职场文书
python 实现德洛内三角剖分的操作
2021/04/22 Python