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中变量的作用域
Jun 16 Python
Python学生成绩管理系统简洁版
Apr 05 Python
TensorFlow 滑动平均的示例代码
Jun 19 Python
Python简单爬虫导出CSV文件的实例讲解
Jul 06 Python
详解Python做一个名片管理系统
Mar 14 Python
Python正则表达式匹配日期与时间的方法
Jul 07 Python
详解Python list和numpy array的存储和读取方法
Nov 06 Python
wxpython绘制音频效果
Nov 18 Python
Python进阶之迭代器与迭代器切片教程
Jan 29 Python
tensorflow之tf.record实现存浮点数数组
Feb 17 Python
Django admin管理工具TabularInline类用法详解
May 14 Python
python request 模块详细介绍
Nov 10 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
paypal即时到账php实现代码
2010/11/28 PHP
Laravel 5框架学习之环境与配置
2015/04/08 PHP
PHP定时执行任务实现方法详解(Timer)
2015/07/30 PHP
PHP Primary script unknown 解决方法总结
2019/08/22 PHP
javascript实现的鼠标链接提示效果生成器代码
2007/06/28 Javascript
javascript中in运算符用法分析
2015/04/28 Javascript
微信小程序 数据访问实例详解
2016/10/08 Javascript
Javascript循环删除数组中元素的几种方法示例
2017/05/18 Javascript
node中koa中间件机制详解
2017/08/22 Javascript
js实现轮播图的两种方式(构造函数、面向对象)
2017/09/30 Javascript
详解给Vue2路由导航钩子和axios拦截器做个封装
2018/04/10 Javascript
vue-cli脚手架打包静态资源请求出错的原因与解决
2019/06/06 Javascript
vue-cli基础配置及webpack配置修改的完整步骤
2019/10/20 Javascript
node实现mock-plugin中间件的方法
2019/12/25 Javascript
Openlayers3实现车辆轨迹回放功能
2020/09/29 Javascript
[48:39]Ti4主赛事胜者组第一天 EG vs NEWBEE 2
2014/07/19 DOTA
[01:13:51]TNC vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python中的对象拷贝示例 python引用传递
2014/01/23 Python
python操作数据库之sqlite3打开数据库、删除、修改示例
2014/03/13 Python
教大家玩转Python字符串处理的七种技巧
2017/03/31 Python
pycharm安装图文教程
2017/05/02 Python
Python实现查找最小的k个数示例【两种解法】
2019/01/08 Python
python批量爬取下载抖音视频
2019/06/17 Python
python单线程下实现多个socket并发过程详解
2019/07/27 Python
Python创建数字列表的示例
2019/11/28 Python
Python super()函数使用及多重继承
2020/05/06 Python
Selenium关闭INFO:CONSOLE提示的解决
2020/12/07 Python
Tod’s英国官方网站:意大利奢华手工制作手袋和鞋履
2019/03/15 全球购物
Linux如何命名文件--使用文件名时应注意
2014/05/29 面试题
土木工程应届生自荐信
2013/09/24 职场文书
岗位竞聘演讲稿
2014/01/10 职场文书
大学生职业规划论文
2014/01/11 职场文书
市场营销职业生涯规划书范文
2014/01/12 职场文书
省级四好少年事迹材料
2014/01/25 职场文书
农村党员学习党的群众路线教育实践活动心得体会
2014/11/04 职场文书
2015年小学生国庆节演讲稿
2015/07/30 职场文书