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 相关文章推荐
Python操作列表之List.insert()方法的使用
May 20 Python
在Django的URLconf中使用命名组的方法
Jul 18 Python
Python计算字符宽度的方法
Jun 14 Python
Python用于学习重要算法的模块pygorithm实例浅析
Aug 16 Python
Django migrations 默认目录修改的方法教程
Sep 28 Python
Django 路由系统URLconf的使用
Oct 11 Python
Python pandas DataFrame操作的实现代码
Jun 21 Python
python如何给字典的键对应的值为字典项的字典赋值
Jul 05 Python
Python线程指南分享
Nov 19 Python
在Python中通过threshold创建mask方式
Feb 19 Python
Python实现从N个数中找到最大的K个数
Apr 02 Python
解决c++调用python中文乱码问题
Jul 29 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中用socket模拟http中post或者get提交数据的示例代码
2013/08/08 PHP
PHP检查端口是否可以被绑定的方法示例
2018/08/09 PHP
thinkphp3.2框架中where条件查询用法总结
2019/08/13 PHP
经典的带阴影的可拖动的浮动层
2006/06/26 Javascript
如何在Web页面上直接打开、编辑、创建Office文档
2007/03/12 Javascript
cnblogs TagCloud基于jquery的实现代码
2010/06/11 Javascript
dess中一个简单的多路委托的实现
2010/07/20 Javascript
js页面跳转常用的几种方式
2010/11/25 Javascript
JAVASCRIPT车架号识别/验证函数代码 汽车车架号验证程序
2012/01/08 Javascript
利用JQuery和Servlet实现跨域提交请求示例分享
2014/02/12 Javascript
node.js中的buffer.Buffer.isBuffer方法使用说明
2014/12/14 Javascript
原生javascript实现图片滚动、延时加载功能
2015/01/12 Javascript
微信小程序 input输入框详解及简单实例
2017/01/10 Javascript
学习使用jQuery表单验证插件和日历插件
2017/02/13 Javascript
JS利用正则表达式实现简单的密码强弱判断实例
2017/06/16 Javascript
更改BootStrap popover的默认样式及popover简单用法
2018/09/13 Javascript
JS查找孩子节点简单示例
2019/07/25 Javascript
javascript设计模式 ? 单例模式原理与应用实例分析
2020/04/09 Javascript
微信小程序多列表渲染数据开关互不影响的实现
2020/06/05 Javascript
JavaScript构造函数原理及实现流程解析
2020/11/19 Javascript
[44:26]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#4EG VS Fnatic第二局
2016/03/03 DOTA
python通过ssh-powershell监控windows的方法
2015/06/02 Python
python中找出numpy array数组的最值及其索引方法
2018/04/17 Python
PYQT5实现控制台显示功能的方法
2019/06/25 Python
python 的topk算法实例
2020/04/02 Python
TensorFlow固化模型的实现操作
2020/05/26 Python
Python中免验证跳转到内容页的实例代码
2020/10/23 Python
英国可持续奢侈品包包品牌:Elvis & Kresse
2018/08/05 全球购物
英国领先的在线旅游和休闲零售商:lastminute.com
2019/01/23 全球购物
在校硕士自我鉴定
2014/01/23 职场文书
令人印象深刻的自荐信
2014/05/25 职场文书
增值税发票丢失证明
2015/06/19 职场文书
情况说明书怎么写
2015/10/08 职场文书
施工安全责任协议书
2016/03/23 职场文书
使用nginx动态转换图片大小生成缩略图
2021/03/31 Servers
pandas DataFrame.shift()函数的具体使用
2021/05/24 Python