python中对list去重的多种方法


Posted in Python onSeptember 18, 2014

今天遇到一个问题,在同事随意的提示下,用了 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 相关文章推荐
Django框架下在视图中使用模版的方法
Jul 16 Python
python递归查询菜单并转换成json实例
Mar 27 Python
Python读取Json字典写入Excel表格的方法
Jan 03 Python
Django中数据库的数据关系:一对一,一对多,多对多
Oct 21 Python
详解Python解决抓取内容乱码问题(decode和encode解码)
Mar 29 Python
python绘制直方图和密度图的实例
Jul 08 Python
python解释器spython使用及原理解析
Aug 24 Python
Python自动化测试笔试面试题精选
Mar 12 Python
Django-xadmin+rule对象级权限的实现方式
Mar 30 Python
用 Python 制作地球仪的方法
Apr 24 Python
学生如何注册Pycharm专业版以及pycharm的安装
Sep 24 Python
基于Pytorch版yolov5的滑块验证码破解思路详解
Feb 25 Python
Python中用Descriptor实现类级属性(Property)详解
Sep 18 #Python
Python中的闭包总结
Sep 18 #Python
python的即时标记项目练习笔记
Sep 18 #Python
python脚本实现分析dns日志并对受访域名排行
Sep 18 #Python
python中的字典详细介绍
Sep 18 #Python
python中执行shell命令的几个方法小结
Sep 18 #Python
python处理PHP数组文本文件实例
Sep 18 #Python
You might like
基于pear auth实现登录验证
2010/02/26 PHP
深入讲解PHP的对象注入(Object Injection)
2017/03/01 PHP
PHP长连接实现与使用方法详解
2018/02/11 PHP
关于Jqzoom的使用心得 jquery放大镜效果插件
2010/04/12 Javascript
FF IE浏览器修改标签透明度的方法
2014/01/27 Javascript
jQuery实现图片上传和裁剪插件Croppie
2015/11/29 Javascript
JS实现点击事件统计的简单实例
2016/07/10 Javascript
原生JS实现幻灯片
2017/02/22 Javascript
Vue+SpringBoot开发V部落博客管理平台
2017/12/27 Javascript
nodejs微信开发之授权登录+获取用户信息
2019/03/17 NodeJs
js 下拉菜单点击旁边收起实现(踩坑记)
2019/09/29 Javascript
浅谈Vue为什么不能检测数组变动
2019/10/14 Javascript
浅谈Ant Design Pro 菜单自定义 icon
2020/11/17 Javascript
Python 条件判断的缩写方法
2008/09/06 Python
pandas apply 函数 实现多进程的示例讲解
2018/04/20 Python
Python3网络爬虫开发实战之极验滑动验证码的识别
2019/08/02 Python
使用Pandas的Series方法绘制图像教程
2019/12/04 Python
Python 解决OPEN读文件报错 ,路径以及r的问题
2019/12/19 Python
tensorflow 保存模型和取出中间权重例子
2020/01/24 Python
Django认证系统user对象实现过程解析
2020/03/02 Python
python 使用raw socket进行TCP SYN扫描实例
2020/05/05 Python
python实现人像动漫化的示例代码
2020/05/17 Python
CSS3贝塞尔曲线示例:创建链接悬停动画效果
2020/11/19 HTML / CSS
HTML5 Web Workers之网站也能多线程的实现
2013/04/24 HTML / CSS
美国知名的家庭连锁百货商店:Boscov’s
2017/07/27 全球购物
学校社会实践活动总结
2014/07/03 职场文书
2014年秋季开学寄语
2014/08/02 职场文书
关于群众路线的心得体会
2014/11/05 职场文书
论群众路线学习笔记
2014/11/06 职场文书
2014个人年终工作总结范文
2014/12/15 职场文书
整改通知书格式
2015/04/22 职场文书
校园新闻稿范文
2015/07/18 职场文书
CSS3 制作精美的定价表
2021/04/06 HTML / CSS
德劲DE1102数字调谐收音机机评
2022/04/07 无线电
JS高级程序设计之class继承重点详解
2022/07/07 Javascript
Python测试框架pytest核心库pluggy详解
2022/08/05 Golang