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实现的一个火车票转让信息采集器
Jul 09 Python
零基础写python爬虫之抓取百度贴吧并存储到本地txt文件改进版
Nov 06 Python
Python采用Django开发自己的博客系统
Sep 29 Python
Python自定义进程池实例分析【生产者、消费者模型问题】
Sep 19 Python
python 实现tar文件压缩解压的实例详解
Aug 20 Python
Python字符串格式化的方法(两种)
Sep 19 Python
Python语言描述KNN算法与Kd树
Dec 13 Python
wxPython绘图模块wxPyPlot实现数据可视化
Nov 19 Python
python 实现让字典的value 成为列表
Dec 16 Python
Python爬虫之Selenium下拉框处理的实现
Dec 04 Python
Python数据分析之pandas函数详解
Apr 21 Python
Python批量解压&压缩文件夹的示例代码
Apr 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
在普通HTTP上安全地传输密码
2007/07/21 PHP
php循环检测目录是否存在并创建(循环创建目录)
2011/01/06 PHP
在Laravel5中正确设置文件权限的方法
2019/05/22 PHP
javaScript 判断字符串是否为数字的简单方法
2009/07/25 Javascript
用Greasemonkey 脚本收藏网站会员信息到本地
2009/10/26 Javascript
javascript 图片上一张下一张链接效果代码
2010/03/12 Javascript
html的DOM中Event对象onblur事件用法实例
2015/01/21 Javascript
使用HTML+CSS+JS制作简单的网页菜单界面
2015/07/27 Javascript
Jquery轮播效果实现过程解析
2016/03/30 Javascript
Highcharts 多个Y轴动态刷新数据的实现代码
2016/05/28 Javascript
ES6学习之变量的解构赋值
2017/02/12 Javascript
Vue2 使用 Echarts 创建图表实例代码
2017/05/18 Javascript
小程序scroll-view组件实现滚动的示例代码
2018/09/20 Javascript
JS数组Object.keys()方法的使用示例
2019/06/05 Javascript
Vue 禁用浏览器的前进后退操作
2020/09/04 Javascript
JavaScript代码简化技巧实例解析
2020/09/09 Javascript
通过实例解析jQ Ajax操作相关原理
2020/09/23 Javascript
Python删除空文件和空文件夹的方法
2015/07/14 Python
深入理解Python中装饰器的用法
2016/06/28 Python
Python黑帽编程 3.4 跨越VLAN详解
2016/09/28 Python
Python利用字典破解WIFI密码的方法
2019/02/27 Python
详解用Python实现自动化监控远程服务器
2019/05/18 Python
python爬虫 urllib模块发起post请求过程解析
2019/08/20 Python
基于python实现地址和经纬度转换
2020/05/19 Python
完美解决keras 读取多个hdf5文件进行训练的问题
2020/07/01 Python
Python3 用matplotlib绘制sigmoid函数的案例
2020/12/11 Python
pytorch Dataset,DataLoader产生自定义的训练数据案例
2021/03/03 Python
html5 CSS过度-webkit-transition使用介绍
2013/07/02 HTML / CSS
FC-Moto丹麦:欧洲最大的摩托车服装和头盔商店之一
2019/08/20 全球购物
秋季运动会广播稿大全
2014/02/17 职场文书
初三开学计划书
2014/04/27 职场文书
2016年区委书记抓基层党建工作公开承诺书
2016/03/25 职场文书
2016年小学推普宣传周活动总结
2016/04/06 职场文书
CSS3实现指纹特效代码
2022/03/17 HTML / CSS
MySQL 外连接语法之 OUTER JOIN
2022/04/09 MySQL
Go本地测试解耦任务拆解及沟通详解Go本地测试的思路沟通的重要性总结
2022/06/21 Golang