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 remove数组删除(del,pop)
Mar 24 Python
Python列表list数组array用法实例解析
Oct 28 Python
python处理大数字的方法
May 27 Python
Python实现string字符串连接的方法总结【8种方式】
Jul 06 Python
在python2.7中用numpy.reshape 对图像进行切割的方法
Dec 05 Python
django框架模板中定义变量(set variable in django template)的方法分析
Jun 24 Python
对numpy下的轴交换transpose和swapaxes的示例解读
Jun 26 Python
在Python 的线程中运行协程的方法
Feb 24 Python
浅谈tensorflow中dataset.shuffle和dataset.batch dataset.repeat注意点
Jun 08 Python
selenium框架中driver.close()和driver.quit()关闭浏览器
Dec 08 Python
Python自动化工具之实现Excel转Markdown表格
Apr 08 Python
Elasticsearch 基本查询和组合查询
Apr 19 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
如何开发一个虚拟域名系统
2006/10/09 PHP
详解WordPress中调用评论模板和循环输出评论的PHP函数
2016/01/05 PHP
javascript 判断中文字符长度的函数代码
2012/08/27 Javascript
JS格式化数字保留两位小数点示例代码
2013/10/15 Javascript
了解Javascript的模块化开发
2015/03/02 Javascript
javascript框架设计之类工厂
2015/06/23 Javascript
Select下拉框模糊查询功能实现代码
2016/07/22 Javascript
详解AngularJS中的表单验证(推荐)
2016/11/17 Javascript
Vue 实用分页paging实例代码
2017/04/12 Javascript
vue中的非父子间的通讯问题简单的实例代码
2017/07/19 Javascript
用ES6的class模仿Vue写一个双向绑定的示例代码
2018/04/20 Javascript
浅谈Webpack打包优化技巧
2018/06/12 Javascript
react native基于FlatList下拉刷新上拉加载实现代码示例
2018/09/30 Javascript
PostgreSQL Node.js实现函数计算方法示例
2019/02/12 Javascript
vue滑动吸顶及锚点定位的示例代码
2020/05/10 Javascript
vue实现评价星星功能
2020/06/30 Javascript
Python实现控制台中的进度条功能代码
2017/12/22 Python
python读取文本中数据并转化为DataFrame的实例
2018/04/10 Python
Python实现定时自动关闭的tkinter窗口方法
2019/02/16 Python
PyCharm+Qt Designer+PyUIC安装配置教程详解
2019/06/13 Python
Django接收自定义http header过程详解
2019/08/23 Python
Python基于os.environ从windows获取环境变量
2020/06/09 Python
英国领先的独立时装店:Van Mildert
2019/10/28 全球购物
linux面试题参考答案(11)
2012/05/01 面试题
交通专业个人自荐信格式
2013/09/23 职场文书
幼儿园托班开学寄语
2014/01/18 职场文书
诚信承诺书范文
2014/03/27 职场文书
敬老模范事迹
2014/05/21 职场文书
保安辞职信范文
2015/02/28 职场文书
中小企业员工手册范本
2015/05/14 职场文书
2015年社区精神文明工作总结
2015/05/26 职场文书
旗帜观后感
2015/06/08 职场文书
确保减税降费落地生根,用实实在在措施
2019/07/19 职场文书
假如给我三天光明:舟逆水而行,人遇挫而达 
2019/10/29 职场文书
如何通过一篇文章了解Python中的生成器
2022/04/02 Python
nginx配置之并发频次限制
2022/04/18 Servers