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实现高效求解素数代码实例
Jun 30 Python
Python的Flask开发框架简单上手笔记
Nov 16 Python
Python实现的爬虫功能代码
Jun 24 Python
Python3下错误AttributeError: ‘dict’ object has no attribute’iteritems‘的分析与解决
Jul 06 Python
Python中enumerate()函数编写更Pythonic的循环
Mar 06 Python
python 中的list和array的不同之处及转换问题
Mar 13 Python
python3的输入方式及多组输入方法
Oct 17 Python
只需7行Python代码玩转微信自动聊天
Jan 27 Python
python os.path.isfile()因参数问题判断错误的解决
Nov 29 Python
Python print不能立即打印的解决方式
Feb 19 Python
python numpy--数组的组合和分割实例
Feb 24 Python
python 日志 logging模块详细解析
Mar 31 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实现基于文本的摩斯电码生成器
2016/01/11 PHP
Thinkphp5+uploadify实现的文件上传功能示例
2018/05/26 PHP
php和nginx交互实例讲解
2019/09/24 PHP
Laravel 在views中加载公共页面的实现代码
2019/10/22 PHP
一款Jquery 分页插件的改造方法(服务器端分页)
2011/07/11 Javascript
jquery 插件学习(四)
2012/08/06 Javascript
深入解析contentWindow, contentDocument
2013/07/04 Javascript
Node.js与PHP、Python的字符处理性能对比
2014/07/06 Javascript
JavaScript操作XML文件之XML读取方法
2015/06/09 Javascript
JavaScript中使用自然对数ln的方法
2015/06/14 Javascript
JS实现的简洁纵向滑动菜单(滑动门)效果
2015/10/19 Javascript
轻松学习jQuery插件EasyUI EasyUI实现树形网络基本操作(2)
2015/11/30 Javascript
基于jQuery日历插件制作日历
2016/03/11 Javascript
jquery单击文字或图片内容放大并居中显示
2017/06/23 jQuery
vue-cli如何引入bootstrap工具的方法
2017/10/19 Javascript
解决vue打包后vendor.js文件过大问题
2019/07/03 Javascript
layui-table表复选框勾选的所有行数据获取的例子
2019/09/13 Javascript
django中send_mail功能实现详解
2018/02/06 Python
Python实现获取邮箱内容并解析的方法示例
2018/06/16 Python
python3.6实现学生信息管理系统
2019/02/21 Python
python学习开发mock接口
2019/04/28 Python
Python之——生成动态路由轨迹图的实例
2019/11/22 Python
python对象销毁实例(垃圾回收)
2020/01/16 Python
torchxrayvision包安装过程(附pytorch1.6cpu版安装)
2020/08/26 Python
耐克波兰官方网站:Nike波兰
2019/09/03 全球购物
保洁主管岗位职责
2013/11/20 职场文书
高分子材料与工程专业个人求职信
2013/12/15 职场文书
迎元旦广播稿
2014/02/22 职场文书
《明天,我们毕业》教学反思
2014/04/24 职场文书
机械工程学院大学生求职信
2014/05/25 职场文书
小学先进集体事迹材料
2014/05/31 职场文书
合同意向书范本
2014/07/30 职场文书
学习型党组织心得体会
2014/09/12 职场文书
python中的被动信息搜集
2021/04/29 Python
OpenCV-Python实现轮廓拟合
2021/06/08 Python
Appium中scroll和drag_and_drop根据元素位置滑动
2022/02/15 Python