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实现将n个点均匀地分布在球面上的方法
Mar 12 Python
在Django框架中运行Python应用全攻略
Jul 17 Python
python subprocess 杀掉全部派生的子进程方法
Jan 16 Python
python的mysqldb安装步骤详解
Aug 14 Python
Python基于辗转相除法求解最大公约数的方法示例
Apr 04 Python
浅谈python 导入模块和解决文件句柄找不到问题
Dec 15 Python
python 执行文件时额外参数获取的实例
Dec 18 Python
Python自动化运维之Ansible定义主机与组规则操作详解
Jun 13 Python
Python GUI编程学习笔记之tkinter事件绑定操作详解
Mar 30 Python
Python坐标轴操作及设置代码实例
Jun 04 Python
在Keras中实现保存和加载权重及模型结构
Jun 15 Python
python 爬取天气网卫星图片
Jun 07 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 水平的题目
2007/05/30 PHP
Zend studio文件注释模板设置方法
2013/09/29 PHP
ThinkPHP 3.2 版本升级了哪些内容
2015/03/05 PHP
PHP的mysqli_rollback()函数讲解
2019/01/23 PHP
jQuery的一些注意
2006/12/06 Javascript
JObj预览一个JS的框架
2008/03/13 Javascript
firefox下对ajax的onreadystatechange的支持情况分析
2009/12/14 Javascript
基于jquery的可多选的下拉列表框
2012/07/20 Javascript
简单实例处理url特殊符号&amp;处理(2种方法)
2013/04/02 Javascript
AngularJS中实现显示或隐藏动画效果的方式总结
2015/12/31 Javascript
node.js express安装及示例网站搭建方法(分享)
2016/08/22 Javascript
详解ECharts使用心得总结
2016/12/06 Javascript
jQuery插件开发发送短信倒计时功能代码
2017/05/09 jQuery
vue  自定义组件实现通讯录功能
2018/09/30 Javascript
vue使用echarts图表的详细方法
2018/10/22 Javascript
微信小程序如何使用canvas二维码保存至手机相册
2019/07/15 Javascript
jQuery实现form表单基于ajax无刷新提交方法实例代码
2019/11/04 jQuery
Vue学习笔记之计算属性与侦听器用法
2019/12/07 Javascript
[01:08]DOTA2次级职业联赛 - Wings 战队宣传片
2014/12/01 DOTA
Python base64编码解码实例
2015/06/21 Python
python轻松查到删除自己的微信好友
2016/01/10 Python
python 字符串转列表 list 出现\ufeff的解决方法
2017/06/22 Python
Python闭包执行时值的传递方式实例分析
2018/06/04 Python
Python模块、包(Package)概念与用法分析
2019/05/31 Python
python格式化输出保留2位小数的实现方法
2019/07/02 Python
Python使用import导入本地脚本及导入模块的技巧总结
2019/08/07 Python
python 使用递归的方式实现语义图片分割功能
2020/07/16 Python
官方授权图形T恤和服装:Fifth Sun
2019/06/12 全球购物
奥地利手表、香水、化妆品和珠宝购物网站:Brasty.at
2021/01/17 全球购物
烹饪自我鉴定
2014/03/01 职场文书
《沉香救母》教学反思
2014/04/19 职场文书
导游个人求职信
2014/04/25 职场文书
小学开学标语
2014/07/01 职场文书
我爱幼儿园演讲稿
2014/09/11 职场文书
班主任高考寄语
2015/02/26 职场文书
Python Pygame实战之塔防游戏的实现
2022/03/17 Python