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实现忽略大小写对字符串列表排序的方法
Sep 25 Python
python登录pop3邮件服务器接收邮件的方法
Apr 30 Python
numpy数组拼接简单示例
Dec 15 Python
基于循环神经网络(RNN)实现影评情感分类
Mar 26 Python
python生成不重复随机数和对list乱序的解决方法
Apr 09 Python
python3实现磁盘空间监控
Jun 21 Python
python 常用的基础函数
Jul 10 Python
python实现汽车管理系统
Nov 30 Python
对python 读取线的shp文件实例详解
Dec 22 Python
使用python serial 获取所有的串口名称的实例
Jul 02 Python
python实现自动打卡的示例代码
Oct 10 Python
Python importlib模块重载使用方法详解
Oct 13 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 随机数的产生、页面跳转、件读写、文件重命名、switch语句
2009/08/07 PHP
从零开始学YII2框架(四)扩展插件yii2-kartikgii
2014/08/20 PHP
PHP数组式访问接口ArrayAccess用法分析
2017/12/28 PHP
PHP实现给定一列字符,生成指定长度的所有可能组合示例
2019/06/22 PHP
JavaScript 验证浏览器是否支持javascript的方法小结
2009/05/17 Javascript
基于jquery的固定表头和列头的代码
2012/05/03 Javascript
利用JQuery和JS实现奇偶行背景颜色自定义效果
2012/11/19 Javascript
详解JavaScript函数绑定
2013/08/18 Javascript
改变隐藏的input中value的值代码
2013/12/30 Javascript
jQuery中:first选择器用法实例
2014/12/30 Javascript
Javascript数据结构与算法之列表详解
2015/03/12 Javascript
JS实现光滑展开合拢的菜单效果代码
2015/09/16 Javascript
Bootstrap组件学习之导航、标签、面包屑导航(精品)
2016/05/17 Javascript
jQuery实现table中的tr上下移动并保持序号不变的实例代码
2016/07/11 Javascript
在Vue.js中使用Mixins的方法
2017/09/12 Javascript
小程序实现搜索框
2020/06/19 Javascript
python控制台显示时钟的示例
2014/02/24 Python
python实现k均值算法示例(k均值聚类算法)
2014/03/16 Python
python比较两个列表是否相等的方法
2015/07/28 Python
简单谈谈Python的pycurl模块
2018/04/07 Python
Python 中 function(#) (X)格式 和 (#)在Python3.*中的注意事项
2018/11/30 Python
python实现倒计时小工具
2019/07/29 Python
pandas.DataFrame.drop_duplicates 用法介绍
2020/07/06 Python
神路信息Java面试题目
2013/03/31 面试题
综合素质的自我鉴定
2013/10/07 职场文书
现代化办公人员工作的自我评价
2013/10/16 职场文书
送货司机岗位职责
2013/12/11 职场文书
最新的咖啡店创业计划书
2013/12/30 职场文书
初中化学教学反思
2014/01/23 职场文书
音乐之声音乐广播稿
2014/09/10 职场文书
征求意见函
2015/06/05 职场文书
2015年挂职锻炼个人总结
2015/10/22 职场文书
大学生村官驻村工作心得体会
2016/01/23 职场文书
三十年再续同学情倡议书
2019/11/27 职场文书
话题作文之生命的旋律
2019/12/17 职场文书
SpringBoot连接MySQL获取数据写后端接口的操作方法
2021/11/02 MySQL