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 相关文章推荐
在Mac OS系统上安装Python的Pillow库的教程
Nov 20 Python
python中异常捕获方法详解
Mar 03 Python
解读! Python在人工智能中的作用
Nov 14 Python
Python中一些不为人知的基础技巧总结
May 19 Python
python 把列表转化为字符串的方法
Oct 23 Python
python去除拼音声调字母,替换为字母的方法
Nov 28 Python
浅析Python中字符串的intern机制
Oct 03 Python
工程师必须了解的LRU缓存淘汰算法以及python实现过程
Oct 15 Python
如何设置PyCharm中的Python代码模版(推荐)
Nov 20 Python
Python排序函数的使用方法详解
Dec 11 Python
使用Python获取爱奇艺电视剧弹幕数据的示例代码
Jan 12 Python
python中HTMLParser模块知识点总结
Jan 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
php将数据库导出成excel的方法
2010/05/07 PHP
php简单判断文本编码的方法
2015/07/30 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
2019/11/21 PHP
JavaScript面象对象设计
2008/04/28 Javascript
在JavaScript中实现类的方式探讨
2013/08/28 Javascript
javascript获取xml节点的最大值(实现代码)
2013/12/11 Javascript
JavaScript中的包装对象介绍
2015/01/27 Javascript
AngularJS变量及过滤器Filter用法分析
2016/11/22 Javascript
AngularJS 获取ng-repeat动态生成的ng-model值实例详解
2016/11/29 Javascript
关于foreach循环中遇到的问题小结
2017/05/08 Javascript
深入理解 webpack 文件打包机制(小结)
2018/01/08 Javascript
JavaScript中call和apply方法的区别实例分析
2018/08/03 Javascript
使vue实现jQuery调用的两种方法
2019/05/12 jQuery
layui添加动态菜单与选项卡
2019/07/26 Javascript
JSX在render函数中的应用详解
2019/09/04 Javascript
js实现登录时记住密码的方法分析
2020/04/05 Javascript
vue3.0 的 Composition API 的使用示例
2020/10/26 Javascript
微信小程序实现自定义动画弹框/提示框的方法实例
2020/11/06 Javascript
[47:20]DAC2018 4.4 淘汰赛 Optic vs Mineski 第一场
2018/04/05 DOTA
python中字符串比较使用is、==和cmp()总结
2018/03/18 Python
Ubuntu下使用python读取doc和docx文档的内容方法
2018/05/08 Python
python:print格式化输出到文件的实例
2018/05/14 Python
python判断设备是否联网的方法
2018/06/29 Python
pygame游戏之旅 游戏中添加显示文字
2018/11/20 Python
python生成器与迭代器详解
2019/01/01 Python
实例讲解使用HTML5 Canvas绘制阴影效果的方法
2016/03/25 HTML / CSS
ellesse美国官方商店:意大利高级运动服品牌
2019/10/29 全球购物
Hotels.com越南:酒店预订
2019/10/29 全球购物
测绘工程系学生的自我评价
2013/11/30 职场文书
法学专业本科生自荐信范文
2013/12/17 职场文书
无偿献血倡议书
2014/04/14 职场文书
高三励志标语
2014/06/05 职场文书
2014年为民办实事工作总结
2014/12/20 职场文书
如何书写邀请函?
2019/06/24 职场文书
Python基本知识点总结
2022/04/07 Python
SpringBoot 集成短信和邮件 以阿里云短信服务为例
2022/04/22 Java/Android