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(Tornado)模拟登录小米抢手机
Nov 12 Python
Python使用Beautiful Soup包编写爬虫时的一些关键点
Jan 20 Python
Python3.2模拟实现webqq登录
Feb 15 Python
Python基于回溯法子集树模板解决取物搭配问题实例
Sep 02 Python
Python登录并获取CSDN博客所有文章列表代码实例
Dec 28 Python
python协程gevent案例 爬取斗鱼图片过程解析
Aug 27 Python
numpy:np.newaxis 实现将行向量转换成列向量
Nov 30 Python
Pytorch 实现sobel算子的卷积操作详解
Jan 10 Python
Python3爬虫里关于代理的设置总结
Jul 30 Python
python 动态绘制爱心的示例
Sep 27 Python
基于python实现坦克大战游戏
Oct 27 Python
Python爬虫制作翻译程序的示例代码
Feb 22 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
PHP数组循环操作详细介绍 附实例代码
2013/02/03 PHP
Yii框架中 find findAll 查找出制定的字段的方法对比
2014/09/10 PHP
php带抄送和密件抄送的邮件发送方法
2015/03/20 PHP
非常全面的php日期时间运算汇总
2015/11/04 PHP
不错的一个日期输入 动态
2006/11/06 Javascript
Javascript实现的分页函数
2006/12/22 Javascript
select 控制网页内容隐藏于显示的实现代码
2010/05/25 Javascript
表单元素的submit()方法和onsubmit事件应用概述
2013/02/01 Javascript
jquery.ajax之beforeSend方法使用介绍
2014/12/08 Javascript
javascript实现禁止右键和F12查看源代码
2014/12/26 Javascript
bootstrap网页框架的使用方法
2016/05/10 Javascript
jQuery Ajax使用FormData对象上传文件的方法
2016/09/07 Javascript
使用DataTable插件实现异步加载数据
2017/11/19 Javascript
微信小程序的mpvue框架快速上手指南
2019/05/15 Javascript
vue2之简易的pc端短信验证码的问题及处理方法
2019/06/03 Javascript
详解在Angular4中使用ng2-baidu-map的方法
2019/06/19 Javascript
vue Treeselect下拉树只能选择第N级元素实现代码
2020/08/31 Javascript
[03:48]DOTA2完美大师赛主赛事第二日精彩集锦
2017/11/24 DOTA
儿童python练习实例
2018/05/27 Python
详解python while 函数及while和for的区别
2018/09/07 Python
远程部署工具Fabric详解(支持Python3)
2019/07/04 Python
使用python代码进行身份证号校验的实现示例
2019/11/21 Python
Python 实现向word(docx)中输出
2020/02/13 Python
HTML5制作表格样式
2016/11/15 HTML / CSS
打印机墨盒:123Inkjets
2017/02/16 全球购物
台湾乐天市场:日本No.1的网路购物网站
2017/03/22 全球购物
编写一个 C 函数,该函数在一个字符串中找到可能的最长的子字符串,且该字符串是由同一字符组成的
2015/07/23 面试题
实习求职信
2013/12/01 职场文书
图书室管理制度
2014/01/19 职场文书
美术指导求职信
2014/03/17 职场文书
网络信息安全承诺书
2014/03/26 职场文书
优秀班集体先进事迹材料
2014/05/28 职场文书
分公司负责人任命书
2014/06/04 职场文书
建筑工地宣传标语
2014/06/18 职场文书
jdbc中自带MySQL 连接池实践示例
2022/07/23 MySQL