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 相关文章推荐
利用python获得时间的实例说明
Mar 25 Python
python实现批量转换文件编码(批转换编码示例)
Jan 23 Python
介绍Python中的__future__模块
Apr 27 Python
深入理解Python装饰器
Jul 27 Python
Python中static相关知识小结
Jan 02 Python
在Windows中设置Python环境变量的实例讲解
Apr 28 Python
Windows下Anaconda2安装NLTK教程
Sep 19 Python
Python合并同一个文件夹下所有PDF文件的方法
Mar 11 Python
python实现AES和RSA加解密的方法
Mar 28 Python
Python参数解析模块sys、getopt、argparse使用与对比分析
Apr 02 Python
python学习——内置函数、数据结构、标准库的技巧(推荐)
Apr 18 Python
Python中typing模块与类型注解的使用方法
Aug 05 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
Mac系统下使用brew搭建PHP(LNMP/LAMP)开发环境
2015/03/03 PHP
THinkPHP获取客户端IP与IP地址查询的方法
2016/11/14 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
2017/11/14 PHP
javascript知识点收藏
2007/02/22 Javascript
js返回上一页并刷新代码整理
2012/12/21 Javascript
Jquery 的outerHeight方法使用介绍
2013/09/11 Javascript
jquery实现的鼠标下拉滚动置顶效果
2014/07/24 Javascript
jQuery通过控制节点实现仅在前台通过get方法完成参数传递
2015/02/02 Javascript
node.js中express中间件body-parser的介绍与用法详解
2017/05/23 Javascript
基于JavaScript实现淘宝商品广告效果
2017/08/10 Javascript
jQuery实现弹窗下底部页面禁止滑动效果
2017/12/19 jQuery
详解Vue中watch的高级用法
2018/05/02 Javascript
vue中前进刷新、后退缓存用户浏览数据和浏览位置的实例讲解
2018/09/21 Javascript
关于AngularJS中ng-repeat不更新视图的解决方法
2018/09/30 Javascript
angularjs使用div模拟textarea文本框的方法
2018/10/02 Javascript
详解javascript设计模式三:代理模式
2019/03/25 Javascript
微信小程序 自定义复选框实现代码实例
2019/09/04 Javascript
使用axios请求时,发送formData请求的示例
2019/10/29 Javascript
JavaScript JSON使用原理及注意事项
2020/07/30 Javascript
node中短信api实现验证码登录的示例代码
2021/01/20 Javascript
[46:14]VGJ.T vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
[04:15]DOTA2-DPC中国联赛 正赛 Ehome vs Aster 选手采访
2021/03/11 DOTA
Linux下Python获取IP地址的代码
2014/11/30 Python
Python之os操作方法(详解)
2017/06/15 Python
python matplotlib 注释文本箭头简单代码示例
2018/01/08 Python
Pandas 同元素多列去重的实例
2018/07/03 Python
Python 50行爬虫抓取并处理图灵书目过程详解
2019/09/20 Python
Python csv文件的读写操作实例详解
2019/11/19 Python
英国设计师泳装、沙滩装和比基尼在线精品店:Beach Cafe
2019/08/28 全球购物
商务主管岗位职责
2013/12/08 职场文书
投资意向书范本
2014/04/01 职场文书
证券公司客户经理岗位职责
2015/04/09 职场文书
浅谈Python 中的复数问题
2021/05/19 Python
python基础之类属性和实例属性
2021/10/24 Python
MySQL的存储函数与存储过程的区别解析
2022/04/08 MySQL
Java界面编程实现界面跳转
2022/06/16 Java/Android