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中优化NumPy包使用性能的教程
Apr 23 Python
python控制windows剪贴板,向剪贴板中写入图片的实例
May 31 Python
Python3.5 处理文本txt,删除不需要的行方法
Dec 10 Python
对Python3中dict.keys()转换成list类型的方法详解
Feb 03 Python
Python minidom模块用法示例【DOM写入和解析XML】
Mar 25 Python
python TF-IDF算法实现文本关键词提取
May 29 Python
python多线程共享变量的使用和效率方法
Jul 16 Python
Python数据可视化 pyecharts实现各种统计图表过程详解
Aug 15 Python
python使用celery实现异步任务执行的例子
Aug 28 Python
Python实现企业微信机器人每天定时发消息实例
Feb 25 Python
PyCharm设置Ipython交互环境和宏快捷键进行数据分析图文详解
Apr 23 Python
如何Python使用re模块实现okenizer
Apr 30 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
使用sockets:从新闻组中获取文章(一)
2006/10/09 PHP
解析PayPal支付接口的PHP开发方式
2010/11/28 PHP
解析php做推送服务端实现ios消息推送
2013/07/01 PHP
Yii模型操作之criteria查找数据库的方法
2016/07/15 PHP
PHP多进程编程之僵尸进程问题的理解
2017/10/15 PHP
PHP+JS实现的实时搜索提示功能
2018/03/13 PHP
PHP基于timestamp和nonce实现的防止重放攻击方案分析
2019/07/26 PHP
一个无限级XML绑定跨框架菜单(For IE)
2007/01/27 Javascript
jQuery中bind与live的用法及区别小结
2014/01/27 Javascript
jquery实现页面百叶窗走马灯式翻滚显示效果的方法
2015/03/12 Javascript
js实现简单鼠标跟随效果的方法
2015/04/10 Javascript
js模拟淘宝网的多级选择菜单实现方法
2015/08/18 Javascript
AngularJS基础教程之简单介绍
2015/09/27 Javascript
vue解决跨域路由冲突问题思路解析
2017/11/03 Javascript
这15个Vue指令,让你的项目开发爽到爆
2019/10/11 Javascript
vue实现的多页面项目如何优化打包的步骤详解
2020/07/19 Javascript
[14:00]DOTA2国际邀请赛史上最长大战 赛后专访B神
2013/08/10 DOTA
Python如何import文件夹下的文件(实现方法)
2017/01/24 Python
python二维列表一维列表的互相转换实例
2018/07/02 Python
对Python中class和instance以及self的用法详解
2019/06/26 Python
在pytorch中查看可训练参数的例子
2019/08/18 Python
python实现的爬取电影下载链接功能示例
2019/08/26 Python
tensorflow查看ckpt各节点名称实例
2020/01/21 Python
Django+Celery实现动态配置定时任务的方法示例
2020/05/26 Python
GUESS德国官网:美国牛仔服装品牌
2017/02/14 全球购物
英国领先的餐饮折扣俱乐部:Gourmet Society
2020/07/26 全球购物
应届大学生的推荐信
2013/11/20 职场文书
童装店创业计划书
2014/01/09 职场文书
制药工程专业职业生涯规划范文
2014/03/10 职场文书
采购意向书范本
2014/03/31 职场文书
员工工作表扬信
2015/05/05 职场文书
黑白记忆观后感
2015/06/18 职场文书
2016小学新学期寄语
2015/12/04 职场文书
初中思品教学反思
2016/02/20 职场文书
python装饰器代码解析
2022/03/23 Python
电脑关机速度很慢怎么办 提升电脑关机速度设置教程
2022/04/08 数码科技