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 相关文章推荐
python3设计模式之简单工厂模式
Oct 17 Python
Python面向对象类的继承实例详解
Jun 27 Python
Django框架实现分页显示内容的方法详解
May 10 Python
windows上安装python3教程以及环境变量配置详解
Jul 18 Python
python3在同一行内输入n个数并用列表保存的例子
Jul 20 Python
python实现多进程通信实例分析
Sep 01 Python
如何使用Python发送HTML格式的邮件
Feb 11 Python
python中提高pip install速度
Feb 14 Python
Django实现将一个字典传到前端显示出来
Apr 03 Python
Python多线程正确用法实例解析
May 30 Python
Python实现迪杰斯特拉算法过程解析
Sep 18 Python
VSCODE配置Markdown及Markdown基础语法详解
Jan 19 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
用Socket发送电子邮件(利用需要验证的SMTP服务器)
2006/10/09 PHP
php学习之变量的使用
2011/05/29 PHP
php模仿asp Application对象在线人数统计实现方法
2015/01/04 PHP
jqTransform form表单美化插件使用方法
2012/07/05 Javascript
优化javascript的执行效率一些方法总结
2013/12/25 Javascript
node.js中的querystring.escape方法使用说明
2014/12/10 Javascript
简单分析javascript面向对象与原型
2015/05/21 Javascript
js去字符串前后空格的实现方法
2016/02/26 Javascript
基于Vue.js实现数字拼图游戏
2016/08/02 Javascript
详解webpack 如何集成第三方js库
2017/06/29 Javascript
浅谈Angular4实现热加载开发旅程
2017/09/08 Javascript
Popup弹出框添加数据实现方法
2017/10/27 Javascript
利用ECharts.js画K线图的方法示例
2018/01/10 Javascript
微信小程序时间选择插件使用详解
2018/12/28 Javascript
jQuery实现动态加载(按需加载)javascript文件的方法分析
2019/05/31 jQuery
bootstrap datepicker的基本使用教程
2019/07/09 Javascript
Vue实现数据表格合并列rowspan效果
2020/11/30 Javascript
JavaScript基于SVG的图片切换效果实例代码
2020/12/15 Javascript
[50:54]完美世界DOTA2联赛 GXR vs IO 第三场 11.07
2020/11/10 DOTA
图文详解WinPE下安装Python
2016/05/17 Python
使用python爬取B站千万级数据
2018/06/08 Python
Python实现重建二叉树的三种方法详解
2018/06/23 Python
在python环境下运用kafka对数据进行实时传输的方法
2018/12/27 Python
Python3爬虫之自动查询天气并实现语音播报
2019/02/21 Python
Python3.6+selenium2.53.6自动化测试_读取excel文件的方法
2019/09/06 Python
Python如何使用OS模块调用cmd
2020/02/27 Python
Python3中FuzzyWuzzy库实例用法
2020/11/18 Python
html5开发之viewport使用
2013/10/17 HTML / CSS
开业庆典邀请函
2014/01/08 职场文书
临床护士自荐信
2014/01/31 职场文书
2013年研究生毕业感言
2014/02/06 职场文书
关于孝道的演讲稿
2014/05/21 职场文书
护理学院专科毕业生求职信
2014/06/28 职场文书
就业推荐表导师评语
2014/12/31 职场文书
租车协议书
2015/01/27 职场文书
圣诞晚会主持词
2015/07/01 职场文书