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 相关文章推荐
pygame学习笔记(2):画点的三种方法和动画实例
Apr 15 Python
Python 搭建Web站点之Web服务器与Web框架
Nov 06 Python
Python随机读取文件实现实例
May 25 Python
浅谈python中列表、字符串、字典的常用操作
Sep 19 Python
python正则表达式面试题解答
Apr 28 Python
Python针对给定列表中元素进行翻转操作的方法分析
Apr 27 Python
PyCharm鼠标右键不显示Run unittest的解决方法
Nov 30 Python
利用 Flask 动态展示 Pyecharts 图表数据方法小结
Sep 04 Python
python 实现dict转json并保存文件
Dec 05 Python
python使用glob检索文件的操作
May 20 Python
教你怎么用python实现字符串转日期
May 24 Python
python神经网络 使用Keras构建RNN训练
May 04 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
Ajax+PHP 边学边练之四 表单
2009/11/27 PHP
php htmlspecialchars加强版
2010/02/16 PHP
优化PHP程序的方法小结
2012/02/23 PHP
php输出含有“#”字符串的方法
2017/01/18 PHP
Laravel5.1 框架控制器基础用法实例分析
2020/01/04 PHP
js 加载并解析XML字符串的代码
2009/12/13 Javascript
Jquery判断$("#id")获取的对象是否存在的方法
2013/09/25 Javascript
JavaScript实现数组在指定位置插入若干元素的方法
2015/04/06 Javascript
js实现带农历和八字等信息的日历特效
2016/05/16 Javascript
浅谈js对象属性 通过点(.) 和方括号([]) 的不同之处
2016/10/29 Javascript
js实现类bootstrap模态框动画
2017/02/07 Javascript
详解如何让Express支持async/await
2017/10/09 Javascript
微信小程序数据存储与取值详解
2018/01/30 Javascript
Angular父子组件通过服务传参的示例方法
2018/10/31 Javascript
vue实现表单未编辑或未保存离开弹窗提示功能
2020/04/08 Javascript
推荐下python/ironpython:从入门到精通
2007/10/02 Python
ubuntu系统下 python链接mysql数据库的方法
2017/01/09 Python
详细分析Python collections工具库
2020/07/16 Python
详解python3 GUI刷屏器(附源码)
2021/02/18 Python
CSS3实现千变万化的文字阴影text-shadow效果设计
2016/04/26 HTML / CSS
iHerb香港:维生素、补充剂和天然保健品
2017/08/01 全球购物
Office DEPOT法国官网:欧迪办公用品采购
2018/01/03 全球购物
岗位职责的定义
2013/11/10 职场文书
优秀员工自荐书
2013/12/19 职场文书
2014年公司迎新年活动方案
2014/02/24 职场文书
活动总结怎么写啊
2014/05/07 职场文书
如何写求职信
2014/05/24 职场文书
小学生我的梦想演讲稿
2014/08/21 职场文书
2014财务人员自我评价范文
2014/09/21 职场文书
党的群众路线调研报告
2014/11/03 职场文书
2014年节能工作总结
2014/12/18 职场文书
幼儿园大班教师个人总结
2015/02/05 职场文书
兼职安全员岗位职责
2015/02/15 职场文书
《狼牙山五壮士》读后感:宁死不屈,视死如归
2019/08/16 职场文书
CSS 实现Chrome标签栏的技巧
2021/08/04 HTML / CSS
介绍一下28个JS常用数组方法
2022/05/06 Javascript