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的web.py框架下的application.py模块
May 02 Python
Python3读取UTF-8文件及统计文件行数的方法
May 22 Python
解析Mac OS下部署Pyhton的Django框架项目的过程
May 03 Python
tensorflow 使用flags定义命令行参数的方法
Apr 23 Python
Python图像处理之识别图像中的文字(实例讲解)
May 10 Python
python实现批量解析邮件并下载附件
Jun 19 Python
Python用于学习重要算法的模块pygorithm实例浅析
Aug 16 Python
django之跨表查询及添加记录的示例代码
Oct 16 Python
Python使用sorted对字典的key或value排序
Nov 15 Python
python射线法判断一个点在图形区域内外
Jun 28 Python
Python如何实现定时器功能
May 28 Python
Python基于locals返回作用域字典
Oct 17 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 adodb分页实现代码
2009/03/19 PHP
php获取mysql数据库中的所有表名的代码
2011/04/23 PHP
PHP表单提交后引号前自动加反斜杠的原因及三种办法关闭php魔术引号
2015/09/30 PHP
PHP实时统计中文字数和区别
2019/02/28 PHP
PHP实现15位身份证号转18位的方法分析
2019/10/16 PHP
JS模拟面向对象全解(一、类型及传递)
2011/07/13 Javascript
jQuery仿天猫实现超炫的加入购物车
2015/05/04 Javascript
JS+CSS实现仿触屏手机拨号盘界面及功能模拟完整实例
2015/05/16 Javascript
javascript实现网页屏蔽Backspace事件,输入框不屏蔽
2015/07/21 Javascript
基于JavaScript怎么实现让歌词滚动播放
2015/11/03 Javascript
JavaScript检查子字符串是否在字符串中的方法
2016/02/03 Javascript
使用JavaScript实现弹出层效果的简单实例
2016/05/31 Javascript
全面介绍javascript实用技巧及单竖杠
2016/07/18 Javascript
jQuery动态修改字体大小的方法【测试可用】
2016/09/09 Javascript
纯JavaScript手写图片轮播代码
2016/10/20 Javascript
jQuery插件HighCharts绘制2D带Label的折线图效果示例【附demo源码下载】
2017/03/08 Javascript
Angularjs 双向绑定时字符串的转换成数字类型的问题
2017/06/12 Javascript
浅谈Node.js之异步流控制
2017/10/25 Javascript
Angular开发实践之服务端渲染
2018/03/29 Javascript
ES6与CommonJS中的模块处理的区别
2018/06/13 Javascript
利用d3.js力导布局绘制资源拓扑图实例教程
2019/01/08 Javascript
详解vue引入子组件方法
2019/02/12 Javascript
JavaScript实现答题评分功能页面
2020/06/24 Javascript
讲解Python的Scrapy爬虫框架使用代理进行采集的方法
2016/02/18 Python
解决python3中解压zip文件是文件名乱码的问题
2018/03/22 Python
Python 实现域名解析为ip的方法
2019/02/14 Python
纯python进行矩阵的相乘运算的方法示例
2019/07/17 Python
解决pytorch报错:AssertionError: Invalid device id的问题
2020/01/10 Python
python 线程的五个状态
2020/09/22 Python
python 实现ping测试延迟的两种方法
2020/12/10 Python
阳光体育:Sunny Sports(购买露营和远足设备)
2018/08/07 全球购物
中国京东和泰国中央集团合资的网站:JD CENTRAL
2020/08/22 全球购物
夜大自我鉴定
2013/10/31 职场文书
歌颂祖国演讲稿
2014/05/04 职场文书
疾病捐款倡议书
2014/05/13 职场文书
2015年企业团支部工作总结
2015/05/21 职场文书