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获取标准北京时间的方法
Mar 24 Python
使用Protocol Buffers的C语言拓展提速Python程序的示例
Apr 16 Python
Python基础中所出现的异常报错总结
Nov 19 Python
Python 字符串大小写转换的简单实例
Jan 21 Python
Python 编码规范(Google Python Style Guide)
May 05 Python
python 猴子补丁(monkey patch)
Jun 26 Python
Pycharm IDE的安装和使用教程详解
Apr 30 Python
Python文件操作模拟用户登陆代码实例
Jun 09 Python
python 用opencv实现图像修复和图像金字塔
Nov 27 Python
Python截图并保存的具体实例
Jan 14 Python
python 实现德洛内三角剖分的操作
Apr 22 Python
Python各协议下socket黏包问题原理
Apr 12 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上的memcache和memcached两个pecl库
2010/03/29 PHP
php 把数字转换成汉字的代码
2015/07/21 PHP
javascript 日历提醒系统( 兼容所有浏览器 )
2009/04/07 Javascript
jquery仿QQ登录账号选择下拉框效果
2016/03/22 Javascript
超漂亮的Bootstrap 富文本编辑器summernote
2016/04/05 Javascript
vue中mint-ui环境搭建详细介绍
2017/04/06 Javascript
详解使用nodeJs安装Vue-cli
2017/05/17 NodeJs
详解angular 中的自定义指令之详解API
2017/06/20 Javascript
使用vue构建移动应用实战代码
2017/08/02 Javascript
浅谈vue-lazyload实现的详细过程
2017/08/22 Javascript
微信小程序 input表单与redio及下拉列表的使用实例
2017/09/20 Javascript
JS使用贪心算法解决找零问题示例
2017/11/27 Javascript
解决vue-cli单页面手机应用input点击手机端虚拟键盘弹出盖住input问题
2018/08/25 Javascript
微信小程序学习总结(三)条件、模板、文件引用实例分析
2020/06/04 Javascript
vue-video-player视频播放器使用配置详解
2020/10/23 Javascript
原生JavaScript实现留言板
2021/01/10 Javascript
[00:55]2015国际邀请赛中国区预选赛5月23日——28日约战上海
2015/05/25 DOTA
pygame学习笔记(1):矩形、圆型画图实例
2015/04/15 Python
Python中的anydbm模版和shelve模版使用指南
2015/07/09 Python
Python读写文件模式和文件对象方法实例详解
2019/09/17 Python
python实现统计代码行数的小工具
2019/09/19 Python
python 实现二维字典的键值合并等函数
2019/12/06 Python
tensorflow实现读取模型中保存的值 tf.train.NewCheckpointReader
2020/02/10 Python
美国正版电视节目和电影在线观看:Hulu
2018/05/24 全球购物
英国在线购买马术服装:EQUUS
2019/07/12 全球购物
大码女装:Ulla Popken
2019/08/06 全球购物
小学生自我评价范文
2014/01/25 职场文书
党员组织关系介绍信
2014/02/13 职场文书
《望洞庭》教学反思
2014/02/16 职场文书
应届毕业生自荐信
2014/05/28 职场文书
先进班组事迹材料
2014/12/25 职场文书
公证书格式
2015/01/23 职场文书
导游欢送词
2015/01/31 职场文书
公司管理制度范本
2015/08/03 职场文书
linux下导入、导出mysql数据库命令的实现方法
2021/05/26 MySQL
Python开发五子棋小游戏
2022/05/02 Python