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设计模式之单例模式实例
Apr 26 Python
python实现查询IP地址所在地
Mar 29 Python
Python中使用gzip模块压缩文件的简单教程
Apr 08 Python
PyQt5每天必学之事件与信号
Apr 20 Python
python requests 库请求带有文件参数的接口实例
Jan 03 Python
Python3解释器知识点总结
Feb 19 Python
python图像和办公文档处理总结
May 28 Python
详解python中的time和datetime的常用方法
Jul 08 Python
详解python中的生成器、迭代器、闭包、装饰器
Aug 22 Python
Python接口测试数据库封装实现原理
May 09 Python
在CentOS7下安装Python3教程解析
Jul 09 Python
Python+uiautomator2实现自动刷抖音视频功能
Apr 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
Cannot modify header information错误解决方法
2008/10/08 PHP
PHP获取毫秒级时间戳的方法
2015/04/15 PHP
浅谈Javascript 执行顺序
2013/12/18 Javascript
js/jquery解析json和数组格式的方法详解
2014/01/09 Javascript
jquery动态分页效果堪比时光网
2014/09/25 Javascript
javascript中动态函数用法实例分析
2015/05/14 Javascript
json格式数据的添加,删除及排序方法
2016/01/21 Javascript
微信小程序 本地存储及登录页面处理实例详解
2017/01/11 Javascript
JavaScript正则表达式exec/g实现多次循环用法示例
2017/01/17 Javascript
js实现PC端根据IP定位当前城市地理位置
2017/02/22 Javascript
详解node+express+ejs+bootstrap构建项目
2017/09/27 Javascript
用React实现一个完整的TodoList的示例代码
2017/10/30 Javascript
React项目动态设置title标题的方法示例
2018/09/26 Javascript
详解适配器在JavaScript中的体现
2018/09/28 Javascript
详解VUE项目中安装和使用vant组件
2019/04/28 Javascript
解决ant Design中this.props.form.validateFields未执行的问题
2020/10/27 Javascript
[02:56]DOTA2上海特锦赛小组赛解说FreeAgain采访花絮
2016/02/27 DOTA
[47:04]LGD vs infamous Supermajor小组赛D组 BO3 第二场 6.3
2018/06/04 DOTA
python学习 流程控制语句详解
2016/06/01 Python
基于Python开发chrome插件的方法分析
2018/07/07 Python
python使用Plotly绘图工具绘制柱状图
2019/04/01 Python
Python opencv实现人眼/人脸识别以及实时打码处理
2019/04/29 Python
python面试题之列表声明实例分析
2019/07/08 Python
估算杭州有多少软件工程师
2015/08/11 面试题
JS原生实现轮播图的几种方法
2021/03/23 Javascript
机械专业应届生求职信
2013/12/12 职场文书
公务员转正鉴定材料
2014/02/11 职场文书
国际贸易专业自荐信
2014/06/10 职场文书
物理学专业求职信
2014/07/04 职场文书
校长四风对照检查材料
2014/09/27 职场文书
护理工作个人总结
2015/03/03 职场文书
2015学校六五普法工作总结
2015/04/22 职场文书
刮痧观后感
2015/06/05 职场文书
工资证明格式模板
2015/06/12 职场文书
运动会100米广播稿
2015/08/19 职场文书
python 爬取吉首大学网站成绩单
2021/06/02 Python