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中的模块和包概念介绍
Apr 13 Python
Python处理字符串之isspace()方法的使用
May 19 Python
Python制作爬虫抓取美女图
Jan 20 Python
python将txt文档每行内容循环插入数据库的方法
Dec 28 Python
django最快程序开发流程详解
Jul 19 Python
Python学习笔记之While循环用法分析
Aug 14 Python
python实现生成Word、docx文件的方法分析
Aug 30 Python
python序列化与数据持久化实例详解
Dec 20 Python
使用python编写一个语音朗读闹钟功能的示例代码
Jul 14 Python
Python unittest装饰器实现原理及代码
Sep 08 Python
Python + opencv对拍照得到的图片进行背景去除的实现方法
Nov 18 Python
详解Python调用系统命令的六种方法
Jan 28 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 获取本地IP代码
2013/06/23 PHP
Java和PHP在Web开发方面对比分析
2015/03/01 PHP
PHP实现二维数组按某列进行排序的方法
2016/11/18 PHP
php使用fputcsv实现大数据的导出操作详解
2020/02/27 PHP
Thinkphp 框架扩展之应用模式实现方法分析
2020/04/27 PHP
滚动经典最新话题[prototype框架]下编写
2006/10/03 Javascript
用cookies实现的可记忆的样式切换效果代码下载
2007/12/24 Javascript
详解JavaScript函数
2015/12/01 Javascript
JSONObject使用方法详解
2015/12/17 Javascript
学习JavaScript鼠标响应事件
2015/12/25 Javascript
基于jQuery实现二级下拉菜单效果
2016/02/01 Javascript
jQuery 获取屏幕高度、宽度的简单实现案例
2016/05/17 Javascript
node-http-proxy修改响应结果实例代码
2016/06/06 Javascript
javascript将中国数字格式转换成欧式数字格式的简单实例
2016/08/02 Javascript
微信小程序开发之视频播放器 Video 弹幕 弹幕颜色自定义实例
2016/12/08 Javascript
Vue.Js中的$watch()方法总结
2017/03/23 Javascript
JavaScript引用类型之基本包装类型实例分析【Boolean、Number和String】
2018/08/09 Javascript
使用vue-router与v-if实现tab切换遇到的问题及解决方法
2018/09/07 Javascript
详解vue2.6插槽更新v-slot用法总结
2019/03/09 Javascript
vue2和vue3的v-if与v-for优先级对比学习
2020/10/10 Javascript
[00:23]魔方之谜解锁款式
2018/12/20 DOTA
Python heapq使用详解及实例代码
2017/01/25 Python
Python入门_浅谈逻辑判断与运算符
2017/05/16 Python
带你了解python装饰器
2017/06/15 Python
Python Json模块中dumps、loads、dump、load函数介绍
2018/05/15 Python
python和mysql交互操作实例详解【基于pymysql库】
2019/06/04 Python
python BlockingScheduler定时任务及其他方式的实现
2019/09/19 Python
python中如何进行连乘计算
2020/05/28 Python
python+pygame实现坦克大战小游戏的示例代码(可以自定义子弹速度)
2020/08/11 Python
毕业生就业自荐书
2013/12/15 职场文书
对标管理实施方案
2014/03/12 职场文书
大班亲子运动会方案
2014/06/10 职场文书
交通事故和解协议书
2015/01/27 职场文书
2016年万圣节家长开放日活动总结
2016/04/05 职场文书
Python selenium的这三种等待方式一定要会!
2021/06/10 Python
Java实现扫雷游戏详细代码讲解
2022/05/25 Java/Android