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 相关文章推荐
pycharm 使用心得(一)安装和首次使用
Jun 05 Python
Python利用turtle库绘制彩虹代码示例
Dec 20 Python
windows下cx_Freeze生成Python可执行程序的详细步骤
Oct 09 Python
selenium+python 对输入框的输入处理方法
Oct 11 Python
Python控制键盘鼠标pynput的详细用法
Jan 28 Python
Python使用线程来接收串口数据的示例
Jul 02 Python
python 模拟贷款卡号生成规则过程解析
Aug 30 Python
基于Django统计博客文章阅读量
Oct 29 Python
详解Selenium 元素定位和WebDriver常用方法
Dec 04 Python
深入解析NumPy中的Broadcasting广播机制
May 30 Python
整理Python中常用的conda命令操作
Jun 15 Python
Python办公自动化之教你用Python批量识别发票并录入到Excel表格中
Jun 26 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版(5)
2006/10/09 PHP
PHP手机号码归属地查询代码(API接口/mysql)
2012/09/04 PHP
php强制用户转向www域名的方法
2015/06/19 PHP
PHP动态地创建属性和方法, 对象的复制, 对象的比较,加载指定的文件,自动加载类文件,命名空间
2016/05/06 PHP
js获取元素到文档区域document的(横向、纵向)坐标的两种方法
2013/05/17 Javascript
js禁止回车提交表单的示例代码
2013/12/23 Javascript
js 加密压缩出现bug解决方案
2014/11/25 Javascript
JavaScript的jQuery库中ready方法的学习教程
2015/08/14 Javascript
JavaScript实现为input与textarea自定义hover,focus效果的方法
2015/08/21 Javascript
js鼠标点击图片切换效果实现代码
2015/11/19 Javascript
AngularJS通过$sce输出html的方法
2016/09/22 Javascript
JQueryEasyUI框架下的combobox的取值和绑定的方法
2017/01/22 Javascript
Angular.js自动化测试之protractor详解
2017/07/07 Javascript
JS实现的计数排序与基数排序算法示例
2017/12/04 Javascript
js+canvas实现滑动拼图验证码功能
2018/03/26 Javascript
vue-cli3.0+element-ui上传组件el-upload的使用
2018/12/03 Javascript
微信小程序使用车牌号输入法的示例代码
2019/08/20 Javascript
在vue中阻止浏览器后退的实例
2019/11/06 Javascript
Python实现的二维码生成小软件
2014/07/11 Python
Python 基于Twisted框架的文件夹网络传输源码
2016/08/28 Python
Python 基础教程之str和repr的详解
2017/08/20 Python
python中文分词,使用结巴分词对python进行分词(实例讲解)
2017/11/14 Python
python 读文件,然后转化为矩阵的实例
2018/04/23 Python
python多线程并发让两个LED同时亮的方法
2019/02/18 Python
Django框架模板的使用方法示例
2019/05/25 Python
Python 实现Image和Ndarray互相转换
2020/02/19 Python
Python Handler处理器和自定义Opener原理详解
2020/03/05 Python
即将毕业大学生自荐信
2014/01/24 职场文书
《都江堰》教学反思
2014/02/07 职场文书
就业协议书盖章的注意事项
2014/09/28 职场文书
2014年保卫工作总结
2014/12/05 职场文书
公司保洁员岗位职责
2015/02/13 职场文书
敬老院志愿者活动总结
2015/05/06 职场文书
不同意离婚答辩状
2015/05/22 职场文书
介绍信应该怎么开?
2019/04/03 职场文书
Nginx安装完成没有生成sbin目录的解决方法
2021/03/31 Servers