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 相关文章推荐
将Django使用的数据库从MySQL迁移到PostgreSQL的教程
Apr 11 Python
Python的math模块中的常用数学函数整理
Feb 04 Python
Python整型运算之布尔型、标准整型、长整型操作示例
Jul 21 Python
python抓取搜狗微信公众号文章
Apr 01 Python
Python使用指定端口进行http请求的例子
Jul 25 Python
django中使用Celery 布式任务队列过程详解
Jul 29 Python
python根据多个文件名批量查找文件
Aug 13 Python
Python中*args和**kwargs的区别详解
Sep 17 Python
python处理excel绘制雷达图
Oct 18 Python
pytorch 数据处理:定义自己的数据集合实例
Dec 31 Python
使用python-pptx包批量修改ppt格式的实现
Feb 14 Python
django上传文件的三种方式
Apr 29 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
smarty section简介与用法分析
2008/10/03 PHP
Memcache 在PHP中的使用技巧
2010/02/08 PHP
修改WordPress中文章编辑器的样式的方法详解
2015/12/15 PHP
php结合web uploader插件实现分片上传文件
2016/05/10 PHP
PHP简单计算两个时间差的方法示例
2017/06/20 PHP
Javascript学习笔记8 用JSON做原型
2010/01/11 Javascript
js 父窗口控制子窗口的行为-打开,关闭,重定位,回复
2010/04/20 Javascript
xss文件页面内容读取(解决)
2010/11/28 Javascript
nodeJS代码实现计算交社保是否合适
2015/03/09 NodeJs
javascript跨域总结之window.name实现的跨域数据传输
2015/11/01 Javascript
JavaScript每天必学之基础知识
2016/09/17 Javascript
JQuery实现列表中复选框全选反选功能封装(推荐)
2016/11/24 Javascript
集合Bootstrap自定义confirm提示效果
2017/09/19 Javascript
浅谈v-for 和 v-if 并用时筛选条件方法
2019/11/07 Javascript
vue-父子组件和ref实例详解
2019/11/10 Javascript
使用 Github Actions 自动部署 Angular 应用到 Github Pages的方法
2020/07/20 Javascript
Python求解平方根的方法
2015/03/11 Python
Python实现TCP协议下的端口映射功能的脚本程序示例
2016/06/14 Python
python实现批量修改图片格式和尺寸
2018/06/07 Python
python实现自动解数独小程序
2019/01/21 Python
Python3.5基础之函数的定义与使用实例详解【参数、作用域、递归、重载等】
2019/04/26 Python
Python生成一个迭代器的实操方法
2019/06/18 Python
Python 输出详细的异常信息(traceback)方式
2020/04/08 Python
Python基于BeautifulSoup爬取京东商品信息
2020/06/01 Python
keras中的History对象用法
2020/06/19 Python
Python 如何反方向迭代一个序列
2020/07/28 Python
Python os库常用操作代码汇总
2020/11/03 Python
一名女生的自荐信
2013/12/08 职场文书
初中班主任评语
2014/04/24 职场文书
会计求职信
2014/05/29 职场文书
个人房屋买卖协议书(范本)
2014/10/04 职场文书
2014年学生党支部工作总结
2014/12/20 职场文书
2015年组织部工作总结
2015/04/03 职场文书
2015大学迎新晚会主持词
2015/07/16 职场文书
2016年6月份红领巾广播稿
2015/12/21 职场文书
Nginx本地配置SSL访问的实例教程
2022/05/30 Servers