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中wx将图标显示在右下角的脚本代码
Mar 08 Python
python开发之基于thread线程搜索本地文件的方法
Nov 11 Python
python中的计时器timeit的使用方法
Oct 20 Python
详解tensorflow训练自己的数据集实现CNN图像分类
Feb 07 Python
一篇文章读懂Python赋值与拷贝
Apr 19 Python
对Tensorflow中的变量初始化函数详解
Jul 27 Python
OpenCV+face++实现实时人脸识别解锁功能
Aug 28 Python
Python实现新型冠状病毒传播模型及预测代码实例
Feb 05 Python
python GUI库图形界面开发之PyQt5动态(可拖动控件大小)布局控件QSplitter详细使用方法与实例
Mar 06 Python
django实现模板中的字符串文字和自动转义
Mar 31 Python
Python实现自动打开电脑应用的示例代码
Apr 17 Python
django orm模块中的 is_delete用法
May 20 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计算两个日期时间差(返回年、月、日)
2014/06/19 PHP
php微信开发之图片回复功能
2018/06/14 PHP
PHP中16个高危函数整理
2019/09/19 PHP
PhpStorm2020 + phpstudyV8 +XDebug的教程详解
2020/09/17 PHP
一段实现页面上的图片延时加载的js代码
2010/02/11 Javascript
jquery 多行滚动代码(附详细解释)
2010/06/17 Javascript
jQuery 源码分析笔记(3) Deferred机制
2011/06/19 Javascript
javascript模拟实现C# String.format函数功能代码
2013/11/25 Javascript
javascript客户端遍历控件与获取父容器对象示例代码
2014/01/06 Javascript
Javascript 按位左移运算符使用介绍(
2014/02/04 Javascript
jquery mobile页面跳转后样式丢失js失效的解决方法
2014/09/06 Javascript
JS动画效果打开、关闭层的实现方法
2015/05/09 Javascript
javascript html5摇一摇功能的实现
2016/04/19 Javascript
简单掌握JavaScript中const声明常量与变量的用法
2016/05/21 Javascript
JS中位置与大小的获取方法
2016/11/22 Javascript
Jquery给当前页或者跳转后页面的导航栏添加选中后样式的实例
2016/12/08 Javascript
你可能不知道的前端算法之文字避让(inMap)
2018/01/12 Javascript
详解nuxt路由鉴权(express模板)
2018/11/21 Javascript
详解如何给React-Router添加路由页面切换时的过渡动画
2019/04/25 Javascript
layer弹出层倒计时关闭的实现方法
2019/09/27 Javascript
在vue中使用console.log无效的解决
2020/08/09 Javascript
Python列表(List)知识点总结
2019/02/18 Python
Python小白必备的8个最常用的内置函数(推荐)
2019/04/03 Python
python async with和async for的使用
2019/06/20 Python
Tensorflow的梯度异步更新示例
2020/01/23 Python
Pandas缺失值2种处理方式代码实例
2020/06/13 Python
Python实现GIF图倒放
2020/07/16 Python
Python调用C/C++的方法解析
2020/08/05 Python
python分布式爬虫中消息队列知识点详解
2020/11/26 Python
澳大利亚免息网上购物:Shop Zero
2016/09/17 全球购物
怎样有效的进行自我评价
2013/10/06 职场文书
员工2014年度工作总结
2014/12/09 职场文书
田径运动会通讯稿
2015/07/18 职场文书
情人节单身感言
2015/08/03 职场文书
2016年校园重阳节广播稿
2015/12/18 职场文书
《天使的翅膀》读后感3篇
2019/12/20 职场文书