Python对list列表结构中的值进行去重的方法总结


Posted in Python onMay 07, 2016

今天遇到一个问题,在同事随意的提示下,用了 itertools.groupby 这个函数。不过这个东西最终还是没用上。
问题就是对一个list中的新闻id进行去重,去重之后要保证顺序不变。
直观方法
最简单的思路就是:

ids = [1,2,3,3,4,2,3,4,5,6,1]
news_ids = []
for id in ids:
  if id not in news_ids:
    news_ids.append(id)

print news_ids

这样也可行,但是看起来不够爽。
用set
另外一个解决方案就是用set:

ids = [1,4,3,3,4,2,3,4,5,6,1]
ids = list(set(ids))

这样的结果是没有保持原来的顺序。
按照索引再次排序
最后通过这种方式解决:

ids = [1,4,3,3,4,2,3,4,5,6,1]
news_ids = list(set(ids))
news_ids.sort(ids.index)

使用itertools.grouby
文章一开始就提到itertools.grouby, 如果不考虑列表顺序的话可用这个:

ids = [1,4,3,3,4,2,3,4,5,6,1]
ids.sort()
it = itertools.groupby(ids)

for k, g in it:
  print k

关于itertools.groupby的原理可以看这里:http://docs.python.org/2/library/itertools.html#itertools.groupby
用reduce
网友reatlk留言给了另外的解决方案。我补充并解释到这里:

In [5]: ids = [1,4,3,3,4,2,3,4,5,6,1]

In [6]: func = lambda x,y:x if y in x else x + [y]

In [7]: reduce(func, [[], ] + ids)
Out[7]: [1, 4, 3, 2, 5, 6]

上面是我在ipython中运行的代码,其中的 lambda x,y:x if y in x else x + [y] 等价于 lambda x,y: y in x and x or x+[y] 。
思路其实就是先把ids变为[[], 1,4,3,......] ,然后在利用reduce的特性。reduce解释参看这里:http://docs.python.org/2/library/functions.html#reduce

Python 相关文章推荐
Python2.x中str与unicode相关问题的解决方法
Mar 30 Python
python3安装pip3(install pip3 for python 3.x)
Apr 03 Python
对python list 遍历删除的正确方法详解
Jun 29 Python
Python用61行代码实现图片像素化的示例代码
Dec 10 Python
Python实现的拉格朗日插值法示例
Jan 08 Python
Django中如何防范CSRF跨站点请求伪造攻击的实现
Apr 28 Python
Pandas之Fillna填充缺失数据的方法
Jun 25 Python
Python3之字节串bytes与字节数组bytearray的使用详解
Aug 27 Python
Windows10下Tensorflow2.0 安装及环境配置教程(图文)
Nov 21 Python
Python使用re模块验证危险字符
May 21 Python
详解tensorflow2.x版本无法调用gpu的一种解决方法
May 25 Python
matplotlib更改窗口图标的方法示例
Feb 03 Python
Python环境下安装使用异步任务队列包Celery的基础教程
May 07 #Python
Python编写电话薄实现增删改查功能
May 07 #Python
Python的dict字典结构操作方法学习笔记
May 07 #Python
Python 类与元类的深度挖掘 II【经验】
May 06 #Python
Python 类与元类的深度挖掘 I【经验】
May 06 #Python
Python 迭代器工具包【推荐】
May 06 #Python
Python中内建函数的简单用法说明
May 05 #Python
You might like
php中删除字符串中最先出现某个字符的实现代码
2013/02/03 PHP
PHP操作FTP类 (上传、下载、移动、创建等)
2016/03/31 PHP
php htmlentities()函数的定义和用法
2016/05/13 PHP
PHP 7.1新特性的汇总介绍
2016/12/16 PHP
PHP实时统计中文字数和区别
2019/02/28 PHP
tp5.1框架数据库子查询操作实例分析
2020/05/26 PHP
jQuery实现列表自动滚动循环滚动展示新闻
2014/08/22 Javascript
Javascript控制div属性动态变化实例分析
2015/10/08 Javascript
JQuery 传送中文乱码问题的简单解决办法
2016/05/24 Javascript
HTML5基于Tomcat 7.0实现WebSocket连接并实现简单的实时聊天
2016/10/31 Javascript
JavaScript实现图片瀑布流和底部刷新
2017/01/02 Javascript
jQuery实现链接的title快速出现的方法
2017/02/20 Javascript
在vue中获取token,并将token写进header的方法
2018/09/26 Javascript
使用js实现一个简单的滚动条过程解析
2019/09/10 Javascript
[01:11:46]DOTA2-DPC中国联赛 正赛 iG vs Magma BO3 第一场 2月23日
2021/03/11 DOTA
python中ConfigParse模块的用法
2014/09/29 Python
Python使用正则匹配实现抓图代码分享
2015/04/02 Python
使用Python编写基于DHT协议的BT资源爬虫
2016/03/19 Python
各种Python库安装包下载地址与安装过程详细介绍(Windows版)
2016/11/02 Python
Python模块搜索路径代码详解
2018/01/29 Python
解决Pyinstaller 打包exe文件 取消dos窗口(黑框框)的问题
2019/06/21 Python
pytorch实现mnist数据集的图像可视化及保存
2020/01/14 Python
Python3运算符常见用法分析
2020/02/14 Python
Django web自定义通用权限控制实现方法
2020/11/24 Python
HTML5 表单验证失败的提示语问题
2017/07/13 HTML / CSS
华三通信H3C面试题
2015/05/15 面试题
Linux内核的同步机制是什么?主要有哪几种内核锁
2013/01/03 面试题
招商业务员岗位职责
2013/12/16 职场文书
小学生安全保证书
2014/02/01 职场文书
大学生创业项目方案
2014/03/08 职场文书
租房合同协议书
2014/04/09 职场文书
工程催款通知书
2015/04/17 职场文书
幼儿园中班教学反思
2016/03/03 职场文书
pandas DataFrame.shift()函数的具体使用
2021/05/24 Python
浅析Python中的套接字编程
2021/06/22 Python
英镑符号 £
2022/02/17 杂记