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获得两个数组交集、并集、差集的方法
Mar 27 Python
使用Python的web.py框架实现类似Django的ORM查询的教程
May 02 Python
神经网络理论基础及Python实现详解
Dec 15 Python
几个适合python初学者的简单小程序,看完受益匪浅!(推荐)
Apr 16 Python
在Python中合并字典模块ChainMap的隐藏坑【推荐】
Jun 27 Python
详解Python中字符串前“b”,“r”,“u”,“f”的作用
Dec 18 Python
Win10下安装并使用tensorflow-gpu1.8.0+python3.6全过程分析(显卡MX250+CUDA9.0+cudnn)
Feb 17 Python
Python 序列化和反序列化库 MarshMallow 的用法实例代码
Feb 25 Python
python GUI库图形界面开发之PyQt5计数器控件QSpinBox详细使用方法与实例
Feb 28 Python
Django实现将views.py中的数据传递到前端html页面,并展示
Mar 16 Python
Python学习之路安装pycharm的教程详解
Jun 17 Python
python中threading和queue库实现多线程编程
Feb 06 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
全国FM电台频率大全 - 20 广西省
2020/03/11 无线电
php 判断字符串中是否包含html标签
2014/02/17 PHP
ThinkPHP实现一键清除缓存方法
2014/06/26 PHP
PHP操作FTP类 (上传、下载、移动、创建等)
2016/03/31 PHP
PHP在innodb引擎下快速代建全文搜索功能简明教程【基于xunsearch】
2016/10/14 PHP
详解PHP安装mysql.so扩展的方法
2016/12/31 PHP
JavaScript高级程序设计 DOM学习笔记
2011/09/10 Javascript
Javascript简单实现可拖动的div
2013/10/22 Javascript
javascript实现动态模态绑定grid过程代码
2014/09/22 Javascript
JavaScript创建闭包的两种方式的优劣与区别分析
2015/06/22 Javascript
javascript比较两个日期相差天数的方法
2015/07/23 Javascript
深入理解JavaScript中的箭头函数
2015/07/28 Javascript
使用控制台破解百小度一个月只准改一次名字
2015/08/13 Javascript
jQuery插件制作的实例教程
2016/05/16 Javascript
浅析Jquery操作select
2016/12/13 Javascript
JavaScript结合HTML DOM实现联动菜单
2017/04/05 Javascript
BootStrap模态框和select2合用时input无法获取焦点的解决方法
2017/09/01 Javascript
JavaScript中字符串的常用操作方法及特殊字符
2018/03/18 Javascript
vue webpack开发访问后台接口全局配置的方法
2018/09/18 Javascript
vuex页面刷新导致数据丢失的解决方案
2020/12/10 Vue.js
Python lambda和Python def区别分析
2014/11/30 Python
python实现多线程的方式及多条命令并发执行
2016/06/07 Python
Python多层装饰器用法实例分析
2018/02/09 Python
Python切片索引用法示例
2018/05/15 Python
详解利用OpenCV提取图像中的矩形区域(PPT屏幕等)
2019/07/01 Python
Python Gitlab Api 使用方法
2019/08/28 Python
pip 安装库比较慢的解决方法(国内镜像)
2019/10/06 Python
Python字符串及文本模式方法详解
2020/09/10 Python
html5-canvas中使用clip抠出一个区域的示例代码
2018/05/25 HTML / CSS
怎样实现H5+CSS3手指滑动切换图片的示例代码
2019/05/05 HTML / CSS
使用canvas实现黑客帝国数字雨效果
2020/01/02 HTML / CSS
美国祛痘、抗衰老药妆品牌:Murad
2016/08/27 全球购物
草莓网英国官网:Strawberrynet UK
2017/02/12 全球购物
英国手机零售商:Metrofone
2019/03/18 全球购物
2014公司年终工作总结
2014/12/19 职场文书
八达岭长城导游词
2015/01/30 职场文书