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入门教程
Feb 08 Python
python使用电子邮件模块smtplib的方法
Aug 28 Python
Python pass详细介绍及实例代码
Nov 24 Python
python如何获取服务器硬件信息
May 11 Python
Python md5与sha1加密算法用法分析
Jul 14 Python
python清除字符串中间空格的实例讲解
May 11 Python
Django实战之用户认证(用户登录与注销)
Jul 16 Python
使用python判断jpeg图片的完整性实例
Jun 10 Python
python Plotly绘图工具的简单使用
Mar 03 Python
Python restful框架接口开发实现
Apr 13 Python
pandas 像SQL一样使用WHERE IN查询条件说明
Jun 05 Python
pytorch 中autograd.grad()函数的用法说明
May 12 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/08/09 PHP
php使用异或实现的加密解密实例
2013/09/04 PHP
跟我学Laravel之请求(Request)的生命周期
2014/10/15 PHP
如何利用PHP实现上传图片功能详解
2020/09/24 PHP
jQuery 入门级学习笔记及源码
2010/01/22 Javascript
jquery模拟按下回车实现代码
2011/09/20 Javascript
JS正则表达式大全(整理详细且实用)
2013/11/14 Javascript
js中confirm实现执行操作前弹出确认框的方法
2014/11/01 Javascript
JavaScript实现跑马灯抽奖活动实例代码解析与优化(一)
2016/02/16 Javascript
JS+CSS实现闪烁字体效果代码
2016/04/05 Javascript
一起学写js Calender日历控件
2016/04/14 Javascript
json定义及jquery操作json的方法
2016/10/03 Javascript
JavaScript实现二分查找实例代码
2017/02/22 Javascript
详解NODEJS基于FFMPEG视频推流测试
2017/11/17 NodeJs
vue 的点击事件获取当前点击的元素方法
2018/09/15 Javascript
前端面试知识点目录一览
2019/04/15 Javascript
通过图带你深入了解vue的响应式原理
2019/06/21 Javascript
vue.js click点击事件获取当前元素对象的操作
2020/08/07 Javascript
VUE异步更新DOM - 用$nextTick解决DOM视图的问题
2020/11/06 Javascript
Python转码问题的解决方法
2008/10/07 Python
在DigitalOcean的服务器上部署flaskblog应用
2015/12/19 Python
详解python中 os._exit() 和 sys.exit(), exit(0)和exit(1) 的用法和区别
2017/06/23 Python
Python爬虫_城市公交、地铁站点和线路数据采集实例
2018/01/10 Python
Python中pandas模块DataFrame创建方法示例
2018/06/20 Python
Django中reverse反转并且传递参数的方法
2019/08/06 Python
Pycharm+django2.2+python3.6+MySQL实现简单的考试报名系统
2019/09/05 Python
python GUI库图形界面开发之PyQt5简单绘图板实例与代码分析
2020/03/08 Python
CSS 说明横向进度条最后显示文字的实现代码
2020/11/10 HTML / CSS
HTML5 CSS3打造相册效果附源码下载
2014/06/16 HTML / CSS
质检部职责
2013/12/28 职场文书
报社实习生自荐信
2014/01/24 职场文书
公证书标准格式
2014/04/10 职场文书
教师反腐倡廉演讲稿
2014/09/03 职场文书
2014年保育员个人工作总结
2014/12/02 职场文书
python 实现体质指数BMI计算
2021/05/26 Python
Python爬虫入门案例之爬取二手房源数据
2021/10/16 Python