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类参数self使用示例
Feb 17 Python
python 自动化将markdown文件转成html文件的方法
Sep 23 Python
Python贪心算法实例小结
Apr 22 Python
基于Python实现大文件分割和命名脚本过程解析
Sep 29 Python
Python迭代器iterator生成器generator使用解析
Oct 24 Python
python pyqtgraph 保存图片到本地的实例
Mar 14 Python
Keras 加载已经训练好的模型进行预测操作
Jun 17 Python
Python filter()及reduce()函数使用方法解析
Sep 05 Python
python 自动识别并连接串口的实现
Jan 19 Python
django注册用邮箱发送验证码的实现
Apr 18 Python
Python绘制地图神器folium的新人入门指南
May 23 Python
解决Pytorch修改预训练模型时遇到key不匹配的情况
Jun 05 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/08/05 PHP
PHP集成百度Ueditor 1.4.3
2014/11/23 PHP
PHP实现将MySQL重复ID二维数组重组为三维数组的方法
2016/08/01 PHP
phpstudy后门rce批量利用脚本的实现
2019/12/12 PHP
用正则表达式 动态创建/增加css style script 兼容IE firefox
2009/03/10 Javascript
25个优雅的jQuery Tooltip插件推荐
2011/05/25 Javascript
Flash图片上传组件 swfupload使用指南
2015/03/14 Javascript
JavaScript实现的多种鼠标拖放效果
2015/11/03 Javascript
第五篇Bootstrap 排版
2016/06/21 Javascript
js调用父框架函数与弹窗调用父页面函数的简单方法
2016/11/01 Javascript
bootstrap表格分页实例讲解
2016/12/30 Javascript
Bootstrap免费字体和图标网站(值得收藏)
2017/03/16 Javascript
基于Vuex无法观察到值变化的解决方法
2018/03/01 Javascript
基于vue-video-player自定义播放器的方法
2018/03/21 Javascript
vue+axios 前端实现登录拦截的两种方式(路由拦截、http拦截)
2018/10/24 Javascript
js实现详情页放大镜效果
2020/10/28 Javascript
[03:20]次级联赛厮杀超职业 现超级兵对拆世纪大战
2014/10/30 DOTA
python解决字符串倒序输出的问题
2018/06/25 Python
Python判断两个文件是否相同与两个文本进行相同项筛选的方法
2019/03/01 Python
Python读取xlsx文件的实现方法
2019/07/04 Python
用Python从0开始实现一个中文拼音输入法的思路详解
2019/07/20 Python
python使用正则表达式(Regular Expression)方法超详细
2019/12/30 Python
Scrapy+Selenium自动获取cookie爬取网易云音乐个人喜爱歌单
2021/02/01 Python
美国时尚配饰品牌:Dooney & Bourke
2017/11/14 全球购物
Java的类可以定义为Protected或者Private得吗
2015/09/25 面试题
企业门卫岗位职责
2013/12/12 职场文书
城市轨道交通工程职业规划书范文
2014/01/18 职场文书
酒店管理求职信范文
2014/04/06 职场文书
房屋买卖委托公证书
2014/04/08 职场文书
投资合作协议书范本
2014/04/17 职场文书
身边的榜样活动方案
2014/08/20 职场文书
骨干教师事迹材料
2014/12/17 职场文书
上班迟到检讨书
2015/05/06 职场文书
辩护意见书
2015/06/04 职场文书
党员证明信
2015/06/19 职场文书
班干部竞选演讲稿(精选5篇)
2019/09/24 职场文书