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的id()函数介绍
Feb 10 Python
详解Python如何获取列表(List)的中位数
Aug 12 Python
Python 基础教程之闭包的使用方法
Sep 29 Python
Python3网络爬虫之使用User Agent和代理IP隐藏身份
Nov 23 Python
详解Python之unittest单元测试代码
Jan 24 Python
Python使用爬虫爬取静态网页图片的方法详解
Jun 05 Python
Python向excel中写入数据的方法
May 05 Python
浅析Windows 嵌入python解释器的过程
Jul 26 Python
使用Python完成15位18位身份证的互转功能
Nov 06 Python
Django自带的加密算法及加密模块详解
Dec 03 Python
Python3自动生成MySQL数据字典的markdown文本的实现
May 07 Python
python实现126邮箱发送邮件
May 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
删除及到期域名的查看(抢域名必备哦)
2008/05/14 PHP
Php注入点构造代码
2008/06/14 PHP
PHP正则的Unknown Modifier错误解决方法
2010/03/02 PHP
php 创建以UNIX时间戳命名的文件夹(示例代码)
2014/03/08 PHP
PHP中Enum(枚举)用法实例详解
2015/12/07 PHP
Laravel实现构造函数自动依赖注入的方法
2016/03/16 PHP
js判断文本框剩余可输入字数的方法
2015/02/04 Javascript
JS+CSS实现模仿浏览器网页字符查找功能的方法
2015/02/26 Javascript
javascript实现获取字符串hash值
2015/05/10 Javascript
贴近用户体验的Jquery日期、时间选择插件
2015/08/19 Javascript
jQuery随手笔记之常用的jQuery操作DOM事件
2015/11/29 Javascript
JS获取文件大小方法小结
2015/12/08 Javascript
jQuery定义插件的方法
2015/12/18 Javascript
javascript实现可键盘控制的抽奖系统
2016/03/10 Javascript
Angular2  NgModule 模块详解
2016/10/19 Javascript
去掉vue 中的代码规范检测两种方法(Eslint验证)
2018/03/21 Javascript
vue.js使用3DES加密的方法示例
2018/05/18 Javascript
vue下拉菜单组件(含搜索)的实现代码
2018/11/25 Javascript
如何封装了一个vue移动端下拉加载下一页数据的组件
2019/01/06 Javascript
JavaScript惰性载入函数实例分析
2019/03/27 Javascript
python利用smtplib实现QQ邮箱发送邮件
2020/05/20 Python
matplotlib savefig 保存图片大小的实例
2018/05/24 Python
使用Python opencv实现视频与图片的相互转换
2019/07/08 Python
python实现点击按钮修改数据的方法
2019/07/17 Python
Python的Tkinter点击按钮触发事件的例子
2019/07/19 Python
django中瀑布流写法实例代码
2019/10/14 Python
Python使用windows设置定时执行脚本
2020/11/12 Python
详解基于 Canvas 手撸一个六边形能力图
2019/09/02 HTML / CSS
韩国三星集团旗下时尚品牌官网:SSF SHOP
2016/08/02 全球购物
HearthSong官网:儿童户外玩具、儿童益智玩具
2017/10/16 全球购物
C++面试题目
2013/06/25 面试题
优秀英语专业毕业生求职信
2013/11/23 职场文书
小学班级特色活动方案
2014/08/31 职场文书
爱国之歌(8首)
2019/09/29 职场文书
python读取mat文件生成h5文件的实现
2022/07/15 Python
Springboot集成kafka高级应用实战分享
2022/08/14 Java/Android