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 list 合并连接字符串的方法
Mar 09 Python
python私有属性和方法实例分析
Jan 15 Python
深入理解 Python 中的多线程 新手必看
Nov 20 Python
python 根据正则表达式提取指定的内容实例详解
Dec 04 Python
python里使用正则的findall函数的实例详解
Oct 19 Python
Python爬虫之正则表达式基本用法实例分析
Aug 08 Python
python初学者,用python实现基本的学生管理系统(python3)代码实例
Apr 10 Python
ubuntu 18.04搭建python环境(pycharm+anaconda)
Jun 14 Python
Python调用百度根据经纬度查询地址的示例代码
Jul 07 Python
python识别文字(基于tesseract)代码实例
Aug 24 Python
python的time模块和datetime模块实例解析
Nov 29 Python
解决Tensorflow 内存泄露问题
Feb 05 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/03 PHP
Laravel中使用自己编写类库的3种方法
2015/02/10 PHP
PHP Trait代码复用类与多继承实现方法详解
2019/06/17 PHP
TP5框架简单登录功能实现方法示例
2019/10/31 PHP
实用javaScript技术-屏蔽类
2006/08/15 Javascript
JavaScript DOM 学习第二章 编辑文本
2010/02/19 Javascript
分享20款好玩的jQuery游戏
2011/04/17 Javascript
ASP.NET jQuery 实例7 通过jQuery来获取DropDownList的Text/Value属性值
2012/02/03 Javascript
ZeroClipboard插件实现多浏览器复制功能(支持firefox、chrome、ie6)
2014/08/30 Javascript
jQuery中:text选择器用法实例
2015/01/03 Javascript
NodeJS学习笔记之Connect中间件应用实例
2015/01/27 NodeJs
百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换
2016/02/19 Javascript
js添加绑定事件的方法
2016/05/15 Javascript
第五篇Bootstrap 排版
2016/06/21 Javascript
JS实现的JSON序列化操作简单示例
2018/07/02 Javascript
JavaScript实现单英文金山打字通
2020/07/24 Javascript
详解JavaScript 异步编程
2020/07/13 Javascript
python实现一个简单的并查集的示例代码
2018/03/19 Python
python:pandas合并csv文件的方法(图书数据集成)
2018/04/12 Python
Python中的 is 和 == 以及字符串驻留机制详解
2019/06/28 Python
python错误调试及单元文档测试过程解析
2019/12/19 Python
Python内置数据类型list各方法的性能测试过程解析
2020/01/07 Python
python 获取当前目录下的文件目录和文件名实例代码详解
2020/03/10 Python
罗德与泰勒百货官网:Lord & Taylor
2016/08/12 全球购物
ProBikeKit英国:在线公路自行车之家
2017/02/10 全球购物
慈善晚会策划方案
2014/05/14 职场文书
校车安全责任书
2014/08/25 职场文书
县长群众路线对照检查材料思想汇报
2014/10/02 职场文书
2015年“公民道德宣传日”活动方案
2015/05/06 职场文书
2015企业年终工作总结范文
2015/05/27 职场文书
拿破仑传读书笔记
2015/07/01 职场文书
2015年信息化建设工作总结
2015/07/23 职场文书
企业年会祝酒词
2015/08/11 职场文书
导游词之襄阳古城
2019/09/27 职场文书
python数据可视化JupyterLab实用扩展程序Mito
2021/11/20 Python
HTML5中的DOCUMENT.VISIBILITYSTATE属性详解
2023/05/07 HTML / CSS