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 相关文章推荐
windows下安装python paramiko模块的代码
Feb 10 Python
django之session与分页(实例讲解)
Nov 13 Python
python修改list中所有元素类型的三种方法
Apr 09 Python
python中for用来遍历range函数的方法
Jun 08 Python
Python  unittest单元测试框架的使用
Sep 08 Python
对python的unittest架构公共参数token提取方法详解
Dec 17 Python
带你认识Django
Jan 15 Python
python根据多个文件名批量查找文件
Aug 13 Python
Django中密码的加密、验密、解密操作
Dec 19 Python
在python image 中实现安装中文字体
May 16 Python
Python实现疫情通定时自动填写功能(附代码)
May 27 Python
python中取绝对值简单方法总结
Jul 24 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
非洲第一个咖啡超凡杯大赛承办国—卢旺达的咖啡怎么样
2021/03/03 咖啡文化
对盗链说再见...
2006/10/09 PHP
实现php加速的eAccelerator dll支持文件打包下载
2007/09/30 PHP
PHP基础学习之流程控制的实现分析
2013/04/28 PHP
PHP实现一个限制实例化次数的类示例
2019/09/16 PHP
js 优化次数过多的循环 考虑到性能问题
2011/03/05 Javascript
实现图片预加载的三大方法及优缺点分析
2014/11/19 Javascript
自定义jQuery插件方式实现强制对象重绘的方法
2015/03/23 Javascript
JS实现同一个网页布局滑动门和TAB选项卡实例
2015/09/23 Javascript
js倒计时抢购实例
2015/12/20 Javascript
使用BootStrap实现用户登录界面UI
2016/08/10 Javascript
Vue 2.0在IE11中打开项目页面空白的问题解决
2017/07/16 Javascript
JS验证码实现代码
2017/09/14 Javascript
微信小程序实现折叠面板
2018/01/31 Javascript
学习JS中的DOM节点以及操作
2018/04/30 Javascript
Vue中使用vee-validate表单验证的方法
2018/05/09 Javascript
JavaScript封装的常用工具类库bee.js用法详解【经典类库】
2018/09/03 Javascript
vue实现图片预览组件封装与使用
2019/07/13 Javascript
NodeJS开发人员常见五个错误理解
2020/10/14 NodeJs
详解JavaScript类型判断的四种方法
2020/10/21 Javascript
查看TensorFlow checkpoint文件中的变量名和对应值方法
2018/06/14 Python
Python查找第n个子串的技巧分享
2018/06/27 Python
python 使用matplotlib 实现从文件中读取x,y坐标的可视化方法
2019/07/04 Python
Python使用xpath实现图片爬取
2020/09/16 Python
python和opencv构建运动检测器的实现
2021/03/03 Python
深入解析HTML5使用SVG图像时的viewBox属性用法
2015/09/02 HTML / CSS
html5手机端页面可以向右滑动导致样式受影响的问题
2018/06/20 HTML / CSS
JAVA和C++区别都有哪些
2015/03/30 面试题
《四季》教学反思
2014/04/08 职场文书
销售代理协议书
2014/09/30 职场文书
2014年专项整治工作总结
2014/11/17 职场文书
邹越演讲观后感
2015/06/15 职场文书
ORACLE数据库对long类型字段进行模糊匹配的解决思路
2021/04/07 Oracle
python四个坐标点对图片区域最小外接矩形进行裁剪
2021/06/04 Python
JMeter对MySQL数据库进行压力测试的实现步骤
2022/01/22 MySQL
Java 超详细讲解设计模式之中的抽象工厂模式
2022/03/25 Java/Android