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判断变量是否已经定义的方法
Aug 18 Python
Python的批量远程管理和部署工具Fabric用法实例
Jan 23 Python
python 查找文件名包含指定字符串的方法
Jun 05 Python
python斐波那契数列的计算方法
Sep 27 Python
python实现得到当前登录用户信息的方法
Jun 21 Python
python读文件的步骤
Oct 08 Python
python实现超市商品销售管理系统
Nov 22 Python
python中线程和进程有何区别
Jun 17 Python
Python图像阈值化处理及算法比对实例解析
Jun 19 Python
python Matplotlib模块的使用
Sep 16 Python
PyCharm2019.3永久激活破解详细图文教程,亲测可用(不定期更新)
Oct 29 Python
Python中使用tkFileDialog实现文件选择、保存和路径选择
May 20 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 mssql 数据库分页SQL语句
2008/12/16 PHP
ThinkPHP使用PHPExcel实现Excel数据导入导出完整实例
2014/07/22 PHP
php中switch与ifelse的效率区别及适用情况分析
2015/02/12 PHP
JQuery 操作Javascript对象和数组的工具函数小结
2010/01/22 Javascript
js创建数据共享接口——简化框架之间相互传值
2011/10/23 Javascript
JavaScript实现定时隐藏与显示图片的方法
2015/08/06 Javascript
jQuery实现的鼠标滑过弹出放大图片特效
2016/01/08 Javascript
jQuery实现的超链接提示效果示例【附demo源码下载】
2016/09/09 Javascript
AngularJS过滤器filter用法总结
2016/12/13 Javascript
JavaScript的继承实现小结
2017/05/07 Javascript
Vue编写多地区选择组件
2017/08/21 Javascript
如何理解Vue的render函数的具体用法
2017/08/30 Javascript
浅谈Angular文字折叠展开组件的原理分析
2017/11/24 Javascript
使用veloticy-ui生成文字动画效果
2018/02/08 Javascript
jQuery实现动态添加和删除input框代码实例
2019/03/29 jQuery
在vue中获取微信支付code及code被占用问题的解决方法
2019/04/16 Javascript
ES6的循环与可迭代对象示例详解
2021/01/31 Javascript
[39:07]LGD vs VP 2018国际邀请赛淘汰赛BO3 第二场 8.21
2018/08/22 DOTA
python 统计一个列表当中的每一个元素出现了多少次的方法
2018/11/14 Python
简单分析python的类变量、实例变量
2019/08/23 Python
python操作gitlab API过程解析
2019/12/27 Python
使用Python制作一盏 3D 花灯喜迎元宵佳节
2021/02/26 Python
英国儿童设计师服装的领先零售商:Base
2019/03/17 全球购物
Laravel的加密解密与哈希实例讲解
2021/03/24 PHP
关于母亲节的感言
2014/02/04 职场文书
上班看电影检讨书
2014/02/12 职场文书
小学生新年寄语
2014/04/03 职场文书
升旗仪式演讲稿
2014/05/08 职场文书
学校标语大全
2014/06/19 职场文书
绿色环保家庭事迹材料
2014/08/31 职场文书
2016元旦文艺汇演主持词
2015/07/06 职场文书
公司员工培训管理制度
2015/08/04 职场文书
职业生涯规划书之大学四年
2019/08/07 职场文书
使用 Apache Superset 可视化 ClickHouse 数据的两种方法
2021/07/07 Servers
css3中transform属性实现的4种功能
2021/08/07 HTML / CSS
在windows server 2012 r2中安装mysql的详细步骤
2022/07/23 Servers