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 相关文章推荐
vc6编写python扩展的方法分享
Jan 17 Python
python使用PIL模块实现给图片打水印的方法
May 22 Python
python爬取51job中hr的邮箱
May 14 Python
Python操作SQLite数据库的方法详解
Jun 16 Python
tensorflow实现对图片的读取的示例代码
Feb 12 Python
django 将model转换为字典的方法示例
Oct 16 Python
Pandas 按索引合并数据集的方法
Nov 15 Python
Python批量生成幻影坦克图片实例代码
Jun 04 Python
python实现自动化上线脚本的示例
Jul 01 Python
Python IDE环境之 新版Pycharm安装详细教程
Mar 05 Python
Django模型验证器介绍与源码分析
Sep 08 Python
python自动化测试通过日志3分钟定位bug
Nov 20 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 curl模拟post请求小实例
2013/11/13 PHP
PHP中SQL查询语句的id=%d解释(推荐)
2016/12/10 PHP
TP3.2批量上传文件或图片 同名冲突问题的解决方法
2017/08/01 PHP
Mootools 1.2教程(3) 数组使用简介
2009/09/14 Javascript
你所不了解的javascript操作DOM的细节知识点(一)
2015/06/17 Javascript
jQuery实现动态表单验证时文本框抖动效果完整实例
2015/08/21 Javascript
JavaScript中函数表达式和函数声明及函数声明与函数表达式的不同
2015/11/15 Javascript
jquery ztree异步搜索(搜叶子)实践
2016/02/25 Javascript
简单谈谈JS数组中的indexOf方法
2016/10/13 Javascript
vue实现页面加载动画效果
2017/09/19 Javascript
ES7中利用Await减少回调嵌套的方法详解
2017/11/01 Javascript
判断div滑动到底部的scroll实例代码
2017/11/15 Javascript
深入浅出webpack之externals的使用
2017/12/04 Javascript
vue input 输入校验字母数字组合且长度小于30的实现代码
2018/05/16 Javascript
Vue通过provide inject实现组件通信
2020/09/03 Javascript
JavaScript对象访问器Getter及Setter原理解析
2020/12/08 Javascript
[59:26]DOTA2上海特级锦标赛D组资格赛#1 EG VS VP第二局
2016/02/28 DOTA
使用python实现拉钩网上的FizzBuzzWhizz问题示例
2014/05/05 Python
PyQt5实现从主窗口打开子窗口的方法
2019/06/19 Python
cProfile Python性能分析工具使用详解
2019/07/22 Python
浅谈pycharm导入pandas包遇到的问题及解决
2020/06/01 Python
OpenCV4.1.0+VS2017环境配置的方法步骤
2020/07/09 Python
TheFork葡萄牙:欧洲领先的在线餐厅预订平台
2019/05/27 全球购物
英国设计师珠宝网站:Joshua James Jewellery
2020/03/01 全球购物
汽车工程专业应届生求职信
2013/10/19 职场文书
信息工程学院毕业生推荐信
2013/11/05 职场文书
培训演讲稿范文
2014/01/12 职场文书
护士试用期自我鉴定
2014/02/08 职场文书
校园公益广告语
2014/03/13 职场文书
三好学生个人总结
2015/02/15 职场文书
区域销售经理岗位职责
2015/04/02 职场文书
银行客户经理培训心得体会
2016/01/09 职场文书
八年级数学教学反思
2016/02/17 职场文书
小学作文指导之如何写人?
2019/07/08 职场文书
Python读取文件夹下的所有文件实例代码
2021/04/02 Python
MySQL数据库之存储过程 procedure
2022/06/16 MySQL