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实现sublime3的less编译插件示例
Apr 27 Python
Python类属性的延迟计算
Oct 22 Python
听歌识曲--用python实现一个音乐检索器的功能
Nov 15 Python
使用Python绘制图表大全总结
Feb 11 Python
MAC中PyCharm设置python3解释器
Dec 15 Python
Python实现在tkinter中使用matplotlib绘制图形的方法示例
Jan 18 Python
Python3爬虫教程之利用Python实现发送天气预报邮件
Dec 16 Python
django商品分类及商品数据建模实例详解
Jan 03 Python
详解Python中pyautogui库的最全使用方法
Apr 01 Python
解决python和pycharm安装gmpy2 出现ERROR的问题
Aug 28 Python
PyCharm上安装Package的实现(以pandas为例)
Sep 18 Python
解决pip安装的第三方包在PyCharm无法导入的问题
Oct 15 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无限分类的类
2007/01/02 PHP
PHP中冒号、endif、endwhile、endfor使用介绍
2010/04/28 PHP
JSON字符串传到后台PHP处理问题的解决方法
2016/06/05 PHP
php 7新特性之类型申明详解
2017/06/06 PHP
thinkPHP5.0框架事务处理操作简单示例
2018/09/07 PHP
js单例模式的两种方案
2013/10/22 Javascript
Jquery动态添加输入框的方法
2015/05/29 Javascript
全国省市二级联动下拉菜单 js版
2016/05/10 Javascript
VueJs与ReactJS和AngularJS的异同点
2016/12/12 Javascript
Bootstrap组合上、下拉框简单实现代码
2017/03/06 Javascript
微信小程序 仿美团分类菜单 swiper分类菜单
2017/04/12 Javascript
nodejs个人博客开发第七步 后台登陆
2017/04/12 NodeJs
javascript简写常用的12个技巧(可以大大减少你的js代码量)
2020/03/28 Javascript
vue.js分页中单击页码更换页面内容的方法(配合spring springmvc)
2018/02/10 Javascript
vue两组件间值传递 $router.push实现方法
2019/05/15 Javascript
javascript设计模式之迭代器模式
2020/01/30 Javascript
JavaScript实现飞舞的泡泡效果
2020/02/07 Javascript
全面解析JavaScript Module模式
2020/07/24 Javascript
python实现将元祖转换成数组的方法
2015/05/04 Python
python 获取网页编码方式实现代码
2017/03/11 Python
python利用thrift服务读取hbase数据的方法
2018/12/27 Python
Python实现的银行系统模拟程序完整案例
2019/04/12 Python
Python队列RabbitMQ 使用方法实例记录
2019/08/05 Python
python根据时间获取周数代码实例
2019/09/30 Python
Python的几种主动结束程序方式
2019/11/22 Python
python如何实现不可变字典inmutabledict
2020/01/08 Python
tensorflow 查看梯度方式
2020/02/04 Python
DOUGLAS荷兰:购买香水和化妆品
2020/10/24 全球购物
最新茶叶店创业计划书
2014/01/14 职场文书
甜品蛋糕店创业计划书范文
2014/02/06 职场文书
学校综治宣传月活动总结
2014/07/02 职场文书
先进员工事迹材料
2014/12/20 职场文书
苦儿流浪记读书笔记
2015/07/01 职场文书
老兵退伍感言
2015/08/03 职场文书
公司年会主持词范文!
2019/05/07 职场文书
nginx 多个location转发任意请求或访问静态资源文件的实现
2021/03/31 Servers