Python实现嵌套列表去重方法示例


Posted in Python onDecember 28, 2017

发现问题

python嵌套列表大家应该都不陌生,但最近遇到了一个问题,这是工作中遇到的一个坑,首先看一下问题

raw_list = [["百度", "CPY"], ["京东", "CPY"], ["黄轩", "PN"], ["百度", "CPY"]]

列表嵌套了列表,并且有一个重复列表["百度", "CPY"],现在要求将这个重复元素进行去重(重复是指嵌套的列表内两个元素都相同),并且保证元素顺序不变,输出还是嵌套列表,即最后结果应该长这样:[["百度", "CPY"], ["京东", "CPY"], ["黄轩", "PN"]]

正常Python去重都是使用set,所以我这边也是用这种思想处理一下

In [8]: new_list = [list(t) for t in set(tuple(_) for _ in raw_list)]
In [9]: new_list
Out[9]: [['京东', 'CPY'], ['百度', 'CPY'], ['黄轩', 'PN']]

=。=以为大功告成,结果发现嵌套列表顺序变了

好吧一步步找一下是从哪边顺序变了的

In [10]: s = set(tuple(_) for _ in raw_list)
In [11]: s
Out[11]: {('京东', 'CPY'), ('百度', 'CPY'), ('黄轩', 'PN')}

恍然大悟关于set的两个关键词:无序 和 不重复 =。=

所以从set解决排序问题基本无望了,然而我还没有放弃,现在问题就变成了对于new_list怎么按照raw_list元素顺序排序,当然肯定要通过sort实现

翻一下Python文档找到以下一段话

文档地址

sort(*, key=None, reverse=False)

This method sorts the list in place, using only < comparisons between 
items. Exceptions are not suppressed - if any comparison operations  
fail, the entire sort operation will fail (and the list will likely be left in a 
 partially modified state).

 [`sort()`](https://docs.python.org/3/library/stdtypes.html?highlight=sort#list.sort "list.sort") 

accepts two arguments that can only be passed by keyword ( [keyword-only arguments](https://docs.python.org/3/glossary.html#keyword-only-parameter) ):

key specifies a function of one argument that is used to extract a 
comparison key from each list element (for example, key=str.lower). 
 The key corresponding to each item in the list is calculated once and  then used for the entire sorting process. The default value of None 
means that list items are sorted directly without calculating a separate
 key value.

开始划重点:

sort方法通过参数key指定一个方法,换句话说,key参数的值是函数。

这个函数和new_list上的每个元素会产生一个结果,sort通过这个结果进行排序。

于是这里就想到求出new_list里的每一个元素在raw_list里的索引,根据这个索引进行排序。

代码实现如下:

In [13]: new_list.sort(key=raw_list.index)
In [14]: new_list
Out[14]: [['百度', 'CPY'], ['京东', 'CPY'], ['黄轩', 'PN']]

结果和期望一样 =。=

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
python登录pop3邮件服务器接收邮件的方法
Apr 30 Python
python处理二进制数据的方法
Jun 03 Python
Python导出DBF文件到Excel的方法
Jul 25 Python
Python进度条实时显示处理进度的示例代码
Jan 30 Python
PyQt5 pyqt多线程操作入门
May 05 Python
python实现日志按天分割
Jul 22 Python
Python人工智能之路 之PyAudio 实现录音 自动化交互实现问答
Aug 13 Python
python实现tail -f 功能
Jan 17 Python
Python loguru日志库之高效输出控制台日志和日志记录
Mar 07 Python
利用python下载scihub成文献为PDF操作
Jul 09 Python
Python jieba结巴分词原理及用法解析
Nov 05 Python
Python必备技巧之字符数据操作详解
Mar 23 Python
Python登录并获取CSDN博客所有文章列表代码实例
Dec 28 #Python
python 寻找优化使成本函数最小的最优解的方法
Dec 28 #Python
python机器学习案例教程——K最近邻算法的实现
Dec 28 #Python
Python实现螺旋矩阵的填充算法示例
Dec 28 #Python
wxPython的安装图文教程(Windows)
Dec 28 #Python
Python制作豆瓣图片的爬虫
Dec 28 #Python
浅谈Python使用Bottle来提供一个简单的web服务
Dec 27 #Python
You might like
德劲1107的电路分析与打磨
2021/03/02 无线电
PHP中的gzcompress、gzdeflate、gzencode函数详解
2014/07/29 PHP
PHP 的比较运算与逻辑运算详解
2016/05/12 PHP
PHP面向对象五大原则之开放-封闭原则(OCP)详解
2018/04/04 PHP
把html页面的部分内容保存成新的html文件的jquery代码
2009/11/12 Javascript
AJAX的跨域与JSONP(为文章自动添加短址的功能)
2010/01/17 Javascript
js jquery数组介绍
2012/07/15 Javascript
jquery获取当前元素索引值用法实例
2015/06/10 Javascript
深入理解Angular2 模板语法
2016/08/07 Javascript
js利用clipboardData实现截屏粘贴功能
2016/10/12 Javascript
JQuery ZTree使用方法详解
2017/01/07 Javascript
深究AngularJS——ng-checked(回写:带真实案例代码)
2017/06/13 Javascript
jQuery实现表格冻结顶栏效果
2017/08/20 jQuery
vue 运用mock数据的示例代码
2017/11/07 Javascript
webstorm中配置Eslint的两种方式及差异比较详解
2018/10/19 Javascript
node使用Mongoose类库实现简单的增删改查
2018/11/08 Javascript
微信小程序学习笔记之目录结构、基本配置图文详解
2019/03/28 Javascript
ES6实现图片切换特效代码
2020/01/14 Javascript
Vue项目页面跳转时浏览器窗口上方显示进度条功能
2020/03/26 Javascript
vue项目启动出现cannot GET /服务错误的解决方法
2020/04/26 Javascript
[01:51]开启你的城市传奇 完美世界城市挑战赛开始报名
2018/10/09 DOTA
Python中的FTP通信模块ftplib的用法整理
2016/07/08 Python
python如何对实例属性进行类型检查
2018/03/20 Python
Python Pexpect库的简单使用方法
2019/01/29 Python
33个Python爬虫项目实战(推荐)
2019/07/08 Python
django自带serializers序列化返回指定字段的方法
2019/08/21 Python
通过python3实现投票功能代码实例
2019/09/26 Python
使用python远程操作linux过程解析
2019/12/04 Python
Python使用shutil模块实现文件拷贝
2020/07/31 Python
Flask缓存静态文件的具体方法
2020/08/02 Python
Python 利用OpenCV给照片换底色的示例代码
2020/08/03 Python
优秀社区干部事迹材料
2014/02/03 职场文书
软件专业毕业生个人自我鉴定
2014/04/17 职场文书
群众路线教育实践活动心得体会(教师)
2014/10/31 职场文书
2015年思想品德教学工作总结
2015/07/22 职场文书
二年级作文之动物作文
2019/11/13 职场文书