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中用于计算对数的log()方法
May 15 Python
Python中shape计算矩阵的方法示例
Apr 21 Python
Python编程django实现同一个ip十分钟内只能注册一次
Nov 03 Python
Python cookbook(数据结构与算法)字典相关计算问题示例
Feb 18 Python
Python Requests模拟登录实现图书馆座位自动预约
Apr 27 Python
python机器学习库xgboost的使用
Jan 20 Python
tensorflow通过模型文件,使用tensorboard查看其模型图Graph方式
Jan 23 Python
django queryset相加和筛选教程
May 18 Python
Python实现敏感词过滤的4种方法
Sep 12 Python
matplotlib常见函数之plt.rcParams、matshow的使用(坐标轴设置)
Jan 05 Python
Flask搭建一个API服务器的步骤
May 28 Python
详细介绍python操作RabbitMq
Apr 12 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 4.2书写安全的脚本
2006/10/09 PHP
PHP远程连接MYSQL数据库非常慢的解决方法
2008/07/05 PHP
ThinkPHP连接数据库及主从数据库的设置教程
2014/08/22 PHP
php设计模式之简单工厂模式详解
2014/09/04 PHP
php格式化日期实例分析
2014/11/12 PHP
Laravel框架基于ajax和layer.js实现无刷新删除功能示例
2019/01/17 PHP
Yii2框架配置文件(Application属性)与调试技巧实例分析
2019/05/27 PHP
JavaScript国旗变换效果代码
2008/08/13 Javascript
JavaScript中String.prototype用法实例
2015/05/20 Javascript
JS+CSS简单树形菜单实现方法
2015/09/12 Javascript
javascript简单比较日期大小的方法
2016/01/05 Javascript
JS百度地图搜索悬浮窗功能
2017/01/12 Javascript
JS简单实现获取元素的封装操作示例
2017/04/07 Javascript
浅谈Vue.js中如何实现自定义下拉菜单指令
2019/01/06 Javascript
[01:10]DOTA2亚洲邀请赛 征战号角响彻全场
2015/01/06 DOTA
[48:37]EG vs OG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
Python字符编码判断方法分析
2016/07/01 Python
Python+OpenCV实现车牌字符分割和识别
2018/03/31 Python
详解python3 + Scrapy爬虫学习之创建项目
2019/04/12 Python
Python实现Mysql数据统计及numpy统计函数
2019/07/15 Python
Python 点击指定位置验证码破解的实现代码
2019/09/11 Python
win10下python2和python3共存问题解决方法
2019/12/23 Python
2021年的Python 时间轴和即将推出的功能详解
2020/07/27 Python
利用canvas实现图片下载功能来实现浏览器兼容问题
2019/05/31 HTML / CSS
Omio英国:搜索并比较便宜的巴士、火车和飞机
2019/08/27 全球购物
英语道歉信范文
2014/01/09 职场文书
五一促销活动总结
2014/07/01 职场文书
2014国庆节餐厅促销活动策划方案
2014/09/16 职场文书
铅球加油稿100字
2014/09/26 职场文书
小学端午节活动总结
2015/02/11 职场文书
2015年大学生社会实践评语
2015/03/26 职场文书
校园广播站开场白
2015/06/01 职场文书
党支部审查意见
2015/06/02 职场文书
MySQL Router的安装部署
2021/04/24 MySQL
canvas绘制折线路径动画实现
2021/05/12 Javascript
利用uni-app生成微信小程序的踩坑记录
2022/04/05 Javascript