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实现JAVA源代码从ANSI到UTF-8的批量转换方法
Aug 10 Python
在Django中进行用户注册和邮箱验证的方法
May 09 Python
利用python解决mysql视图导入导出依赖的问题
Dec 17 Python
使用python获取电脑的磁盘信息方法
Nov 01 Python
使用PM2+nginx部署python项目的方法示例
Nov 07 Python
Django ORM多对多查询方法(自定义第三张表&ManyToManyField)
Aug 09 Python
python+jinja2实现接口数据批量生成工具
Aug 28 Python
python 魔法函数实例及解析
Sep 25 Python
numpy中三维数组中加入元素后的位置详解
Nov 28 Python
基于Python和PyYAML读取yaml配置文件数据
Jan 13 Python
python图形开发GUI库pyqt5的详细使用方法及各控件的属性与方法
Feb 14 Python
python读取并查看npz/npy文件数据以及数据显示方法
Apr 14 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
apache2.2.4+mysql5.0.77+php5.2.8安装精简
2009/04/29 PHP
提高php运行速度的一些小技巧分享
2012/07/03 PHP
php调用mysql存储过程实例分析
2014/12/29 PHP
10个值得深思的PHP面试题
2016/11/14 PHP
Aster vs Newbee BO3 第二场2.18
2021/03/10 DOTA
js同时按下两个方向键
2007/12/01 Javascript
jquery 单击li防止重复加载的实现代码
2010/12/24 Javascript
博客侧边栏模块跟随滚动条滑动固定效果的实现方法(js+jquery等)
2013/03/24 Javascript
javascript在子页面中函数无法调试问题解决方法
2014/01/17 Javascript
完美兼容各大浏览器获取HTTP_REFERER方法总结
2014/06/24 Javascript
jQuery easyui的validatebox校验规则扩展及easyui校验框validatebox用法
2016/01/18 Javascript
javascript实现鼠标点击页面 移动DIV
2016/12/02 Javascript
简单实现js进度条加载效果
2020/03/25 Javascript
node实现登录图片验证码的示例代码
2018/04/20 Javascript
关于layui flow loading占位图的实现方法
2019/09/21 Javascript
js代码实现轮播图
2020/05/04 Javascript
JavaScript中clientWidth,offsetWidth,scrollWidth的区别
2021/01/25 Javascript
[45:25]完美世界DOTA2联赛循环赛 PXG vs IO 第一场 11.06
2020/11/09 DOTA
Python中的pack和unpack的使用
2018/03/12 Python
Python使用re模块正则提取字符串中括号内的内容示例
2018/06/01 Python
Python中pandas模块DataFrame创建方法示例
2018/06/20 Python
python的scikit-learn将特征转成one-hot特征的方法
2018/07/10 Python
对json字符串与python字符串的不同之处详解
2018/12/19 Python
pandas对dataFrame中某一个列的数据进行处理的方法
2019/07/08 Python
详解基于python-django框架的支付宝支付案例
2019/09/23 Python
Python pyautogui模块实现鼠标键盘自动化方法详解
2020/02/17 Python
夏威夷航空官网:Hawaiian Airlines
2016/09/11 全球购物
ASOS西班牙官网:英国在线时尚和美容零售商
2020/01/10 全球购物
Puccini乌克兰:购买行李箱、女士手袋网上商店
2020/08/06 全球购物
波兰汽车配件网上商店:iParts.pl
2020/09/08 全球购物
颐和园的导游词
2015/01/30 职场文书
董存瑞观后感
2015/06/11 职场文书
关于python爬虫应用urllib库作用分析
2021/09/04 Python
SpringBoot连接MySQL获取数据写后端接口的操作方法
2021/11/02 MySQL
漫画「古见同学有交流障碍症」第25卷封面公开
2022/03/21 日漫
vue数据字典取键值项目的字典问题
2022/04/12 Vue.js