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中的index()方法使用教程
May 18 Python
实例讲解Python中函数的调用与定义
Mar 14 Python
python魔法方法-属性转换和类的表示详解
Jul 22 Python
python数据清洗系列之字符串处理详解
Feb 12 Python
使用Python+wxpy 找出微信里把你删除的好友实例
Feb 21 Python
Python脚本利用adb进行手机控制的方法
Jul 08 Python
flask/django 动态查询表结构相同表名不同数据的Model实现方法
Aug 29 Python
Python 求数组局部最大值的实例
Nov 26 Python
Python range与enumerate函数区别解析
Feb 28 Python
Django 解决distinct无法去除重复数据的问题
May 20 Python
详解Selenium 元素定位和WebDriver常用方法
Dec 04 Python
Python中递归以及递归遍历目录详解
Oct 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
PHP中替换换行符的几种方法小结
2012/10/15 PHP
浅谈PHP与C#的值类型指向区别的详解
2013/05/21 PHP
Linux Apache PHP Oracle 安装配置(具体操作步骤)
2013/06/17 PHP
浅析php中三个等号(===)和两个等号(==)的区别
2013/08/06 PHP
PHP Curl模拟登录微信公众平台、新浪微博实例代码
2016/01/28 PHP
php自定义截取中文字符串-utf8版
2017/02/27 PHP
Javascript中常见的校验如域名、手机、邮箱等等
2014/01/02 Javascript
JS动态改变表格边框宽度的方法
2015/03/31 Javascript
jQuery构造函数init参数分析
2015/05/13 Javascript
javascript实现dom动态创建省市纵向列表菜单的方法
2015/05/14 Javascript
JavaScript中实现map功能代码分享
2015/06/11 Javascript
JavaScript编程中实现对象封装特性的实例讲解
2016/06/24 Javascript
jQuery Ajax Post 回调函数不执行问题的解决方法
2016/08/15 Javascript
JavaScript Uploadify文件上传实例
2017/02/28 Javascript
如何通过非数字与字符的方式实现PHP WebShell详解
2017/07/02 Javascript
安装Node.js并启动本地服务的操作教程
2018/05/12 Javascript
layui 弹出删除确认界面的实例
2019/09/06 Javascript
[02:44]DOTA2英雄基础教程 钢背兽
2013/12/19 DOTA
python之wxPython应用实例
2014/09/28 Python
详解Python的Django框架中的中间件
2015/07/24 Python
Python之str操作方法(详解)
2017/06/19 Python
Python KMeans聚类问题分析
2018/02/23 Python
Python 批量合并多个txt文件的实例讲解
2018/05/08 Python
python函数修饰符@的使用方法解析
2019/09/02 Python
CSS3圆角和渐变2种常用功能详解
2016/01/06 HTML / CSS
分享CSS3制作卡片式图片的方法
2016/07/08 HTML / CSS
Canvas图片分割效果的实现
2019/07/29 HTML / CSS
ToysRus日本官网:玩具反斗城
2018/09/08 全球购物
微软中国官方商城:Microsoft Store中国
2018/10/12 全球购物
水污染治理专业毕业生推荐信
2013/11/14 职场文书
土木工程专业个人求职信
2013/12/05 职场文书
商铺消防安全责任书
2014/07/29 职场文书
文明班级申报材料
2014/12/24 职场文书
python urllib库的使用详解
2021/04/13 Python
在pycharm中无法import所安装的库解决方案
2021/05/31 Python
Mysql的Table doesn't exist问题及解决
2022/12/24 MySQL