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中查找excel某一列的重复数据 剔除之后打印
Feb 10 Python
Python使用正则匹配实现抓图代码分享
Apr 02 Python
Python制作爬虫采集小说
Oct 25 Python
离线安装Pyecharts的步骤以及依赖包流程
Apr 23 Python
Tensorflow使用支持向量机拟合线性回归
Sep 07 Python
Python中按值来获取指定的键
Mar 04 Python
基于django channel实现websocket的聊天室的方法示例
Apr 11 Python
python登录WeChat 实现自动回复实例详解
May 28 Python
python GUI库图形界面开发之pyinstaller打包python程序为exe安装文件
Feb 26 Python
详解利用python识别图片中的条码(pyzbar)及条码图片矫正和增强
Nov 17 Python
Python集合set()使用的方法详解
Mar 18 Python
Python基本知识点总结
Apr 07 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
laravel安装和配置教程
2014/10/29 PHP
JavaScript Perfection kill 测试及答案
2010/03/23 Javascript
js 实现css风格选择器(压缩后2KB)
2012/01/12 Javascript
js动态为代码着色显示行号
2013/05/29 Javascript
详解Javascript动态操作CSS
2014/12/08 Javascript
javascript实现类似超链接的效果
2014/12/26 Javascript
jQuery插件实现大图全屏图片相册
2015/03/14 Javascript
一看就懂:jsonp详解
2015/06/01 Javascript
jQuery Easyui学习教程之实现datagrid在没有数据时显示相关提示内容
2016/07/09 Javascript
BootStrap入门教程(三)之响应式原理
2016/09/19 Javascript
React Native实现进度条弹框的示例代码
2017/07/17 Javascript
详解Vue取消eslint语法限制
2018/08/04 Javascript
Vue.js组件高级特性实例详解
2018/12/24 Javascript
vue中的mvvm模式讲解
2019/01/31 Javascript
vue单应用在ios系统中实现微信分享功能操作
2020/09/07 Javascript
Openlayers测量距离与面积的实现方法
2020/09/25 Javascript
Javascript实现打鼓效果
2021/01/29 Javascript
[01:29:46]DOTA2上海特级锦标赛C组资格赛#1 OG VS LGD第二局
2016/02/27 DOTA
[46:14]完美世界DOTA2联赛PWL S3 Magma vs INK ICE 第一场 12.11
2020/12/16 DOTA
python将控制台输出保存至文件的方法
2019/01/07 Python
python绘制BA无标度网络示例代码
2019/11/21 Python
如何使用python传入不确定个数参数
2020/02/18 Python
python实现梯度下降法
2020/03/24 Python
如何打包Python Web项目实现免安装一键启动的方法
2020/05/21 Python
python的json包位置及用法总结
2020/06/21 Python
对Pytorch 中的contiguous理解说明
2021/03/03 Python
HTML5本地存储之Web Storage详解
2016/07/04 HTML / CSS
美国卡车、吉普车和SUV零件网站:4 Wheel Parts
2016/11/24 全球购物
荷兰手表网站:Watch2Day
2018/07/02 全球购物
澳洲Chemist Direct药房中文网:澳洲大型线上直邮药房
2019/11/04 全球购物
雅虎笔试题(字符串操作)
2015/03/24 面试题
小学班长竞选演讲稿
2014/04/24 职场文书
工伤事故赔偿协议书范文
2014/09/24 职场文书
借名购房协议书范本
2014/10/06 职场文书
2014年防汛工作总结
2014/12/08 职场文书
2016大一新生军训感言
2015/12/08 职场文书