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中函数的参数
Apr 27 Python
Python中统计函数运行耗时的方法
May 05 Python
Flask的图形化管理界面搭建框架Flask-Admin的使用教程
Jun 13 Python
详解 Python 与文件对象共事的实例
Sep 11 Python
Python打印输出数组中全部元素
Mar 13 Python
python定时关机小脚本
Jun 20 Python
对python3 Serial 串口助手的接收读取数据方法详解
Jun 12 Python
Python 实现数据结构-堆栈和队列的操作方法
Jul 17 Python
Python制作微信好友背景墙教程(附完整代码)
Jul 17 Python
Python实现微信小程序支付功能
Jul 25 Python
Python中的Cookie模块如何使用
Jun 04 Python
如何使用Python自动生成报表并以邮件发送
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
PHP5.4中json_encode中文转码的变化小结
2013/01/30 PHP
使用session判断用户登录用户权限(超简单)
2013/06/08 PHP
64位windows系统下安装Memcache缓存
2015/12/06 PHP
PHP函数nl2br()与自定义函数nl2p()换行用法分析
2016/04/02 PHP
php简单统计中文个数的方法
2016/09/30 PHP
基于PHP实现堆排序原理及实例详解
2020/06/19 PHP
jQuery 性能优化指南(3)
2009/05/21 Javascript
javascript 匿名函数的理解(透彻版)
2010/01/28 Javascript
关于js拖拽上传 [一个拖拽上传修改头像的流程]
2011/07/13 Javascript
一个JavaScript递归实现反转数组字符串的实例
2014/10/14 Javascript
EasyUI Combobox设置默认值 获取text的方法
2016/11/28 Javascript
用javascript获取任意颜色的更亮或更暗颜色值示例代码
2017/07/21 Javascript
在 Node.js 中使用原生 ES 模块方法解析
2017/09/19 Javascript
javascript中new Array()和var arr=[]用法区别
2017/12/01 Javascript
Vue中computed、methods与watch的区别总结
2019/04/10 Javascript
详解vite2.0配置学习(typescript版本)
2021/02/25 Javascript
[47:21]Liquid vs TNC Supermajor 胜者组 BO3 第一场 6.4
2018/06/05 DOTA
Python使用django获取用户IP地址的方法
2015/05/11 Python
Python的Django框架中的数据过滤功能
2015/07/17 Python
python+requests+unittest API接口测试实例(详解)
2017/06/10 Python
python xlsxwriter创建excel图表的方法
2018/06/11 Python
信号生成及DFT的python实现方式
2020/02/25 Python
Python selenium环境搭建实现过程解析
2020/09/08 Python
简述python&pytorch 随机种子的实现
2020/10/07 Python
pycharm 实现光标快速移动到括号外或行尾的操作
2021/02/05 Python
pycharm Tab键设置成4个空格的操作
2021/02/26 Python
美国购买肉、鸭、家禽、鹅肝和熟食网站:D’Artagnan
2018/11/13 全球购物
我的珠宝盒:Ma boîte à bijoux
2019/08/27 全球购物
编程实现去掉XML的重复结点
2014/05/28 面试题
介绍一下gcc特性
2012/01/20 面试题
DELPHI中如何调用API,可举例说明
2014/01/16 面试题
大学生表扬信范文
2014/01/09 职场文书
关于学习的决心书
2015/02/05 职场文书
2016新年问候语大全
2015/11/11 职场文书
2016党风廉政建设心得体会范文
2016/01/25 职场文书
Django给表单添加honeypot验证增加安全性
2021/05/06 Python