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通过字典dict判断指定键值是否存在的方法
Mar 21 Python
详解Python各大聊天系统的屏蔽脏话功能原理
Dec 01 Python
使用Python写CUDA程序的方法
Mar 27 Python
Django上使用数据可视化利器Bokeh解析
Jul 31 Python
用Python抢火车票的简单小程序实现解析
Aug 14 Python
django2.2安装错误最全的解决方案(小结)
Sep 24 Python
在Pytorch中计算自己模型的FLOPs方式
Dec 30 Python
python实现随机加减法生成器
Feb 24 Python
pycharm2020.1.2永久破解激活教程,实测有效
Oct 29 Python
python产生模拟数据faker库的使用详解
Nov 04 Python
7个关于Python的经典基础案例
Nov 07 Python
Python中with上下文管理协议的作用及用法
Mar 18 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
解析PHP自带的进位制之间的转换函数
2013/06/08 PHP
浅谈PHP检查数组中是否存在某个值 in_array 函数
2016/06/13 PHP
关于onScroll事件在IE6下每次滚动触发三次bug说明
2011/09/21 Javascript
Javascript高级技巧分享
2014/02/25 Javascript
Javascript判断图片尺寸大小实例分析
2014/06/16 Javascript
深入了解Node.js中的一些特性
2014/09/25 Javascript
JavaScript实现常用二级省市级联下拉列表的方法
2015/03/25 Javascript
浅谈node.js中async异步编程
2015/10/22 Javascript
jquery mobile 移动web(5)
2015/12/20 Javascript
js 截取或者替换字符串中的数字实现方法
2016/06/13 Javascript
JS对象是否拥有某属性如何判断
2017/02/03 Javascript
jQuery实现简单漂亮的Nav导航菜单效果
2017/03/29 jQuery
详解Vue中状态管理Vuex
2017/05/11 Javascript
通过vue-cli来学习修改Webpack多环境配置和发布问题
2017/12/22 Javascript
在node中使用jwt签发与验证token的方法
2019/04/03 Javascript
vue项目中在外部js文件中直接调用vue实例的方法比如说this
2019/04/28 Javascript
用JS实现一个简单的打砖块游戏
2019/12/11 Javascript
vue props 单项数据流实例分享
2020/02/16 Javascript
小程序websocket心跳库(websocket-heartbeat-miniprogram)
2020/02/23 Javascript
javascript实现数字时钟效果
2021/02/06 Javascript
[52:40]完美世界DOTA2联赛PWL S2 Magma vs GXR 第一场 11.29
2020/12/02 DOTA
python实现根据ip地址反向查找主机名称的方法
2015/04/29 Python
Python常用的文件及文件路径、目录操作方法汇总介绍
2015/05/21 Python
CentOS中使用virtualenv搭建python3环境
2015/06/08 Python
Python处理JSON时的值报错及编码报错的两则解决实录
2016/06/26 Python
python3反转字符串的3种方法(小结)
2019/11/07 Python
Python中and和or如何使用
2020/05/28 Python
python 基于DDT实现数据驱动测试
2021/02/18 Python
CSS3 animation实现逐帧动画效果
2016/06/02 HTML / CSS
基于html5 DeviceOrientation 实现微信摇一摇功能
2015/09/25 HTML / CSS
2013年大学生的自我鉴定
2013/10/24 职场文书
国贸专业求职信
2014/06/28 职场文书
党员自我剖析材料范文
2014/10/06 职场文书
2015年上半年物业工作总结
2015/03/30 职场文书
员工聘用合同范本
2015/09/21 职场文书
python爬虫之爬取笔趣阁小说
2021/04/22 Python