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逐行读取文件内容的三种方法
Jan 20 Python
浅谈python numpy中nonzero()的用法
Apr 02 Python
使用Python和xlwt向Excel文件中写入中文的实例
Apr 21 Python
Python 循环语句之 while,for语句详解
Apr 23 Python
python抓取京东小米8手机配置信息
Nov 13 Python
Python网页正文转换语音文件的操作方法
Dec 09 Python
浅谈Python 递归算法指归
Aug 22 Python
python global关键字的用法详解
Sep 05 Python
Python Flask上下文管理机制实例解析
Mar 16 Python
Python使用20行代码实现微信聊天机器人
Jun 05 Python
python+selenium小米商城红米K40手机自动抢购的示例代码
Mar 24 Python
Python3使用Qt5来实现简易的五子棋小游戏
May 02 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
解析zend studio中直接导入svn中的项目的方法步骤
2013/06/21 PHP
深入理解PHP的远程多会话调试
2017/09/21 PHP
laravel 中某一字段自增、自减的例子
2019/10/11 PHP
jquery 获取dom固定元素 添加样式的简单实例
2014/02/04 Javascript
网站繁简切换的JS遇到页面卡死的解决方法
2014/03/12 Javascript
jQuery防止click双击多次提交及传递动态函数或多参数
2014/04/02 Javascript
浅谈javascript中的instanceof和typeof
2015/02/27 Javascript
跟我学习javascript的函数和函数表达式
2015/11/16 Javascript
详解JavaScript正则表达式之分组匹配及反向引用
2016/03/09 Javascript
Bootstrap3制作图片轮播效果
2016/05/12 Javascript
Ionic如何实现下拉刷新与上拉加载功能
2016/06/03 Javascript
JavaScript中apply方法的应用技巧小结
2016/09/29 Javascript
footer定位页面底部(代码分享)
2017/03/07 Javascript
vue2实现移动端上传、预览、压缩图片解决拍照旋转问题
2017/04/13 Javascript
AngularJS基于provider实现全局变量的读取和赋值方法
2017/06/28 Javascript
浅谈webpack对样式的处理
2018/01/05 Javascript
JS实现百度搜索接口及链接功能实例代码
2018/02/02 Javascript
使用validate.js实现表单数据提交前的验证方法
2018/09/04 Javascript
vue实现一个炫酷的日历组件
2018/10/08 Javascript
vue实现双向绑定和依赖收集遇到的坑
2018/11/29 Javascript
基于Vue 实现一个中规中矩loading组件
2019/04/03 Javascript
JavaScript JSON数据处理全集(小结)
2019/08/15 Javascript
[01:08:56]DOTA2-DPC中国联赛 正赛 Magma vs LBZS BO3 第一场 2月7日
2021/03/11 DOTA
Python实现的批量下载RFC文档
2015/03/10 Python
Pipenv一键搭建python虚拟环境的方法
2018/05/22 Python
python文字和unicode/ascll相互转换函数及简单加密解密实现代码
2019/08/12 Python
tensorflow estimator 使用hook实现finetune方式
2020/01/21 Python
Python GUI编程学习笔记之tkinter中messagebox、filedialog控件用法详解
2020/03/30 Python
Java如何基于wsimport调用wcf接口
2020/06/17 Python
python 使用csv模块读写csv格式文件的示例
2020/12/02 Python
Linux的文件类型
2012/03/07 面试题
会计专业大学生职业生涯规划范文
2014/01/11 职场文书
酒店经理职责
2014/01/30 职场文书
小学生五年级大队长竞选发言稿
2014/09/12 职场文书
担保书范本
2015/01/20 职场文书
小班下学期个人总结
2015/02/12 职场文书