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基于BeautifulSoup实现抓取网页指定内容的方法
Jul 09 Python
Python读取Excel表格,并同时画折线图和柱状图的方法
Oct 14 Python
Python嵌套式数据结构实例浅析
Mar 05 Python
Python HTML解析模块HTMLParser用法分析【爬虫工具】
Apr 05 Python
Python 正则表达式爬虫使用案例解析
Sep 23 Python
Python 矩阵转置的几种方法小结
Dec 02 Python
Python StringIO如何在内存中读写str
Jan 07 Python
Scrapy框架介绍之Puppeteer渲染的使用
Jun 19 Python
Python实现树莓派摄像头持续录像并传送到主机的步骤
Nov 30 Python
Python写情书? 10行代码展示如何把情书写在她的照片里
Apr 21 Python
分享python函数常见关键字
Apr 26 Python
python解析照片拍摄时间进行图片整理
Jul 23 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写出自己的BLOG系统 2
2010/04/12 PHP
php防注入,表单提交值转义的实现详解
2013/06/10 PHP
Zend Framework页面缓存实例
2014/06/25 PHP
php绘制一条弧线的方法
2015/01/24 PHP
JQuery 将元素显示在屏幕的中央的代码
2010/02/27 Javascript
模拟select的代码
2011/10/19 Javascript
js修改table中Td的值(定义td的单击事件)
2013/01/10 Javascript
jquery解决图片路径不存在执行替换路径
2013/02/06 Javascript
使用jQuery插件创建常规模态窗口登陆效果
2013/08/23 Javascript
表单序列化与jq中的serialize使用示例
2014/02/21 Javascript
javascript中AJAX用法实例分析
2015/01/30 Javascript
JS实现文档加载完成后执行代码
2015/07/09 Javascript
实例讲解JavaScript中call、apply、bind方法的异同
2016/09/13 Javascript
jquery平滑滚动到顶部插件使用详解
2017/05/08 jQuery
在React 组件中使用Echarts的示例代码
2017/11/08 Javascript
深入理解ES6中let和闭包
2018/02/22 Javascript
使用Python的Tornado框架实现一个简单的WebQQ机器人
2015/04/24 Python
解读Python中degrees()方法的使用
2015/05/18 Python
Python实现把json格式转换成文本或sql文件
2015/07/10 Python
使用python3.5仿微软记事本notepad
2016/06/15 Python
Python数据结构与算法之图结构(Graph)实例分析
2017/09/05 Python
python opencv之分水岭算法示例
2018/02/24 Python
Pycharm新手教程(只需要看这篇就够了)
2019/06/18 Python
pytorch中的embedding词向量的使用方法
2019/08/18 Python
python脚本实现音频m4a格式转成MP3格式的实例代码
2019/10/09 Python
python3实现raspberry pi(树莓派)4驱小车控制程序
2020/02/12 Python
6种非常炫酷的CSS3按钮边框动画特效
2016/03/16 HTML / CSS
美国电子产品折扣网站:Daily Steals
2017/05/20 全球购物
毕业生医学检验求职信
2013/10/16 职场文书
群众路线领导对照材料
2014/08/23 职场文书
爱心助学感谢信
2015/01/21 职场文书
2015年保管员工作总结
2015/04/30 职场文书
毕业答辩开场白范文
2015/05/27 职场文书
二十年同学聚会致辞
2015/07/28 职场文书
开网店计划分析
2019/07/30 职场文书
uwsgi+nginx代理Django无法访问静态资源的解决
2021/05/10 Servers