Python对list列表结构中的值进行去重的方法总结


Posted in Python onMay 07, 2016

今天遇到一个问题,在同事随意的提示下,用了 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中super关键字用法实例分析
May 28 Python
Python学生信息管理系统修改版
Mar 13 Python
python多进程使用及线程池的使用方法代码详解
Oct 24 Python
Python socket实现多对多全双工通信的方法
Feb 13 Python
详解Python3网络爬虫(二):利用urllib.urlopen向有道翻译发送数据获得翻译结果
May 07 Python
django框架实现一次性上传多个文件功能示例【批量上传】
Jun 19 Python
python中for循环把字符串或者字典添加到列表的方法
Jul 20 Python
Python Handler处理器和自定义Opener原理详解
Mar 05 Python
解决在keras中使用model.save()函数保存模型失败的问题
May 21 Python
pycharm代码删除恢复的方法
Jun 26 Python
python实现简单的聊天小程序
Jul 07 Python
用 Python 定义 Schema 并生成 Parquet 文件详情
Sep 25 Python
Python环境下安装使用异步任务队列包Celery的基础教程
May 07 #Python
Python编写电话薄实现增删改查功能
May 07 #Python
Python的dict字典结构操作方法学习笔记
May 07 #Python
Python 类与元类的深度挖掘 II【经验】
May 06 #Python
Python 类与元类的深度挖掘 I【经验】
May 06 #Python
Python 迭代器工具包【推荐】
May 06 #Python
Python中内建函数的简单用法说明
May 05 #Python
You might like
PHP设计模式之代理模式的深入解析
2013/06/13 PHP
php使用Swoole实现毫秒级定时任务的方法
2020/09/04 PHP
JavaScript Event学习第十一章 按键的检测
2010/02/10 Javascript
JQuery优缺点分析说明
2010/06/09 Javascript
对xmlHttp对象的理解
2011/01/17 Javascript
javascript 判断字符串是否包含某字符串及indexOf使用示例
2013/10/18 Javascript
js实现ifram取父窗口URL地址的方法
2015/02/09 Javascript
js实现两点之间画线的方法
2015/05/12 Javascript
在JavaScript中如何解决用execCommand(
2015/10/19 Javascript
js获取新浪天气接口的实现代码
2016/06/06 Javascript
js实现为a标签添加事件的方法(使用闭包循环)
2016/08/02 Javascript
jQuery多级联动下拉插件chained用法示例
2016/08/20 Javascript
Angularjs之ngModel中的值验证绑定方法
2018/09/13 Javascript
代码实例ajax实现点击加载更多数据图片
2018/10/12 Javascript
Sublime Text3 配置 NodeJs 环境的方法
2020/05/20 NodeJs
vue实现编辑器键盘抬起时内容跟随光标距顶位置向上滚动效果
2020/05/28 Javascript
[01:14:34]DOTA2上海特级锦标赛C组资格赛#2 LGD VS Newbee第一局
2016/02/28 DOTA
Python学习笔记(一)(基础入门之环境搭建)
2014/06/05 Python
Django使用中间键实现csrf认证详解
2019/07/22 Python
Django Python 获取请求头信息Content-Range的方法
2019/08/06 Python
python字符串的index和find的区别详解
2020/06/20 Python
在HTML5 canvas里用卷积核进行图像处理的方法
2018/05/02 HTML / CSS
Parts Express:音频、视频和扬声器的第一来源
2017/04/25 全球购物
美国电子元器件分销商:Newark element14
2018/01/13 全球购物
罗兰·穆雷官网:Roland Mouret
2018/09/28 全球购物
Sarenza德国:法国最大的时尚鞋和包包网上商店
2019/06/08 全球购物
一个J2EE项目团队的主要人员组成是什么
2012/06/04 面试题
酒店拾金不昧表扬信
2014/01/18 职场文书
厂区绿化方案
2014/05/08 职场文书
商场租赁意向书
2014/07/30 职场文书
2014年移动公司工作总结
2014/12/08 职场文书
党支部承诺书
2015/01/20 职场文书
2015年小学中秋节活动总结
2015/03/23 职场文书
学习弘扬焦裕禄精神心得体会
2016/01/23 职场文书
2019年幼儿园管理条例范本!
2019/07/17 职场文书
解决Navicat for MySQL 连接 MySQL 报2005错误的问题
2021/05/29 MySQL