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 相关文章推荐
django文档学习之applications使用详解
Jan 29 Python
python学生信息管理系统
Mar 13 Python
python3.6 tkinter实现屏保小程序
Jul 30 Python
pytorch 获取层权重,对特定层注入hook, 提取中间层输出的方法
Aug 17 Python
Python urlopen()和urlretrieve()用法解析
Jan 07 Python
tf.concat中axis的含义与使用详解
Feb 07 Python
tensorflow实现读取模型中保存的值 tf.train.NewCheckpointReader
Feb 10 Python
Python中sys模块功能与用法实例详解
Feb 26 Python
使用python从三个角度解决josephus问题的方法
Mar 27 Python
浅谈matplotlib中FigureCanvasXAgg的用法
Jun 16 Python
python em算法的实现
Oct 03 Python
python 输入字符串生成所有有效的IP地址(LeetCode 93号题)
Oct 15 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
php简单的留言板与回复功能具体实现
2014/02/19 PHP
个人写的PHP验证码生成类分享
2014/08/21 PHP
php隐藏IP地址后两位显示为星号的方法
2014/11/21 PHP
Centos下升级php5.2到php5.4全记录(编译安装)
2015/04/03 PHP
PHP获取当前日期和时间及格式化方法参数
2015/05/11 PHP
php删除数组中重复元素的方法
2015/12/22 PHP
PHP 中提示undefined index如何解决(多种方法)
2016/03/16 PHP
PHP搭建大文件切割分块上传功能示例
2017/01/04 PHP
关于php几种字符串连接的效率比较(详解)
2017/02/22 PHP
Laravel中如何增加自定义全局函数详解
2017/05/09 PHP
js Date自定义函数 延迟脚本执行
2010/03/10 Javascript
图片动画横条广告带上下滚动的JS代码
2013/10/25 Javascript
IE浏览器中图片onload事件无效的解决方法
2014/04/29 Javascript
js实现的动画导航菜单效果代码
2015/09/10 Javascript
推荐10 个很棒的 jQuery 特效代码
2015/10/04 Javascript
AngularJS ng-blur 指令详解及简单实例
2016/07/30 Javascript
浅谈jquery中使用canvas的问题
2016/10/10 Javascript
jQuery实现表格冻结顶栏效果
2017/08/20 jQuery
jQuery中内容过滤器简单用法示例
2018/03/31 jQuery
深入浅析JS中的严格模式
2018/06/04 Javascript
angular 实现的输入框数字千分位及保留几位小数点功能示例
2018/06/19 Javascript
vue实现点击关注后及时更新列表功能
2018/06/26 Javascript
微信小程序修改swiper默认指示器样式的实例代码
2018/07/18 Javascript
vuejs+element UI点击编辑表格某一行时获取内容填入表单的示例
2018/10/31 Javascript
微信小程序之swiper滑动面板用法示例
2018/12/04 Javascript
不依任何赖第三方,单纯用vue实现Tree 树形控件的案例
2020/09/21 Javascript
[28:07]完美世界DOTA2联赛PWL S3 Phoenix vs INK ICE 第二场 12.13
2020/12/17 DOTA
python网络编程之TCP通信实例和socketserver框架使用例子
2014/04/25 Python
Python OpenCV实现图片上输出中文
2018/01/22 Python
PyQt5实现五子棋游戏(人机对弈)
2020/03/24 Python
Python3交互式shell ipython3安装及使用详解
2020/07/11 Python
解锁canvas导出图片跨域的N种姿势小结
2019/01/24 HTML / CSS
大专生自我鉴定范文
2013/10/01 职场文书
先进事迹报告会感言
2014/01/24 职场文书
科研先进个人典型材料
2014/01/31 职场文书
机电一体化专业求职信
2014/07/22 职场文书