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 03 Python
Python进程间通信用法实例
Jun 04 Python
Python实现的彩票机选器实例
Jun 17 Python
深入理解Python3中的http.client模块
Mar 29 Python
使用pandas把某一列的字符值转换为数字的实例
Jan 29 Python
TensorFlow卷积神经网络之使用训练好的模型识别猫狗图片
Mar 14 Python
python制作抖音代码舞
Apr 07 Python
Python向excel中写入数据的方法
May 05 Python
python pandas 时间日期的处理实现
Jul 30 Python
Python中常用的高阶函数实例详解
Feb 21 Python
python实现快速文件格式批量转换的方法
Oct 16 Python
关于PyCharm安装后修改路径名称使其可重新打开的问题
Oct 20 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
Linux下实现PHP多进程的方法分享
2012/08/16 PHP
Linux平台php命令行程序处理管道数据的方法
2016/11/10 PHP
php无限级分类实现评论及回复功能
2019/02/18 PHP
PHP扩展Swoole实现实时异步任务队列示例
2019/04/13 PHP
jQuery中复合属性选择器用法实例
2014/12/31 Javascript
jQuery实现平滑滚动的标签分栏切换效果
2015/08/28 Javascript
js显示动态时间的方法详解
2016/08/20 Javascript
JS 动态判断PC和手机浏览器实现代码
2016/09/21 Javascript
js仿搜狐视频记录片列表展示效果
2020/05/30 Javascript
webpack配置之后端渲染详解
2017/10/26 Javascript
JS实现简单的浮动碰撞效果示例
2017/12/28 Javascript
Vue-Router模式和钩子的用法
2018/02/28 Javascript
详解Vue中数组和对象更改后视图不刷新的问题
2018/09/21 Javascript
Vue项目引发的「过滤器」使用教程
2019/03/12 Javascript
js打开word文档预览操作示例【不是下载】
2019/05/23 Javascript
解决在layer.open中使用时间控件laydate失败的问题
2019/09/11 Javascript
JavaScript基于SVG的图片切换效果实例代码
2020/12/15 Javascript
Python利用multiprocessing实现最简单的分布式作业调度系统实例
2017/11/14 Python
python实现百度语音识别api
2018/04/10 Python
Numpy 将二维图像矩阵转换为一维向量的方法
2018/06/05 Python
解决pandas read_csv 读取中文列标题文件报错的问题
2018/06/15 Python
Python实现微信中找回好友、群聊用户撤回的消息功能示例
2019/08/23 Python
详解HTML5表单新增属性
2016/12/21 HTML / CSS
奥地利时尚、美容、玩具和家居之家:Kastner & Öhler
2020/04/26 全球购物
什么是数据抽象
2016/11/26 面试题
《蜗牛的奖杯》教后反思
2014/04/24 职场文书
团支书竞选演讲稿
2014/04/28 职场文书
贷款担保申请书
2014/05/20 职场文书
无财产离婚协议书范本
2014/10/28 职场文书
暑假安全保证书
2015/02/28 职场文书
当幸福来敲门英文观后感
2015/06/01 职场文书
调解协议书范本
2016/03/21 职场文书
MySQL 重写查询语句的三种策略
2021/05/10 MySQL
Python中文纠错的简单实现
2021/07/07 Python
动画《新网球王子 U-17 WORLD CUP》希腊队PV公开
2022/04/02 日漫
python计算列表元素与乘积详情
2022/08/05 Python