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爬取网站数据保存使用的方法
Nov 20 Python
python条件变量之生产者与消费者操作实例分析
Mar 22 Python
python实现简单中文词频统计示例
Nov 08 Python
python线程中同步锁详解
Apr 27 Python
flask框架使用orm连接数据库的方法示例
Jul 16 Python
python用plt画图时,cmp设置方法
Dec 13 Python
对python修改xml文件的节点值方法详解
Dec 24 Python
pytorch中如何使用DataLoader对数据集进行批处理的方法
Aug 06 Python
flask 实现token机制的示例代码
Nov 07 Python
使用celery和Django处理异步任务的流程分析
Feb 19 Python
Python DES加密实现原理及实例解析
Jul 17 Python
Python 实现进度条的六种方式
Jan 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
基于Linux调试工具strace与gdb的常用命令总结
2013/06/03 PHP
CI框架学习笔记(二) -入口文件index.php
2014/10/27 PHP
smarty半小时快速上手入门教程
2014/10/27 PHP
php实现获取文件mime类型的方法
2015/02/11 PHP
在php中设置session用memcache来存储的方法总结
2016/01/14 PHP
php中使用array_filter()函数过滤数组实例讲解
2021/03/03 PHP
jquery 学习之二 属性(类)
2010/11/25 Javascript
本地图片预览(支持IE6/IE7/IE8/Firefox3)经验总结
2013/03/25 Javascript
jQuery中offset()方法用法实例
2015/01/16 Javascript
在Node.js应用中使用Redis的方法简介
2015/06/24 Javascript
JavaScript中Date对象的常用方法示例
2015/10/24 Javascript
angular指令笔记ng-options的使用方法
2017/09/18 Javascript
Angular value与ngValue区别详解
2019/11/27 Javascript
angular异步验证防抖踩坑实录
2019/12/01 Javascript
vue中element 的upload组件发送请求给后端操作
2020/09/07 Javascript
Python使用回溯法子集树模板获取最长公共子序列(LCS)的方法
2017/09/08 Python
python实现连续图文识别
2018/12/18 Python
Python爬虫设置代理IP(图文)
2018/12/23 Python
PyTorch实现更新部分网络,其他不更新
2019/12/31 Python
基于python实现计算两组数据P值
2020/07/10 Python
Python实现PS滤镜中的USM锐化效果
2020/12/04 Python
施华洛世奇意大利官网:SWAROVSKI意大利
2018/07/23 全球购物
欧洲领先的技术商店:eibmarkt.com
2019/05/10 全球购物
美国购买韩国护肤和美容产品网站:Althea Korea
2020/11/16 全球购物
学生拾金不昧表扬信
2014/01/21 职场文书
科研课题实施方案
2014/03/18 职场文书
办公室班子四风问题对照检查材料
2014/10/04 职场文书
2014年环境卫生工作总结
2014/11/24 职场文书
房地产销售助理岗位职责
2015/04/14 职场文书
检讨书范文大全
2015/05/07 职场文书
倡议书怎么写?
2019/04/11 职场文书
Idea连接MySQL数据库出现中文乱码的问题
2021/04/14 MySQL
不要在HTML中滥用div
2021/05/08 HTML / CSS
新手初学Java List 接口
2021/07/07 Java/Android
关于React Native使用axios进行网络请求的方法
2021/08/02 Javascript
MySQL 数据表操作
2022/05/04 MySQL