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函数缺省值与引用学习笔记分享
Feb 10 Python
Python闭包思想与用法浅析
Dec 27 Python
对python 合并 累加两个dict的实例详解
Jan 21 Python
在win10和linux上分别安装Python虚拟环境的方法步骤
May 09 Python
在Python中实现函数重载的示例代码
Dec 12 Python
python 浅谈serial与stm32通信的编码问题
Dec 18 Python
找Python安装目录,设置环境路径以及在命令行运行python脚本实例
Mar 09 Python
python 制作python包,封装成可用模块教程
Jul 13 Python
PyCharm2020.1.1与Python3.7.7的安装教程图文详解
Aug 07 Python
Python类的继承super相关原理解析
Oct 22 Python
详解解决jupyter不能使用pytorch的问题
Feb 18 Python
pytorch中的torch.nn.Conv2d()函数图文详解
Feb 28 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下目前为目最全的CURL中文说明
2010/08/01 PHP
PHP中变量引用与变量销毁机制分析
2014/11/15 PHP
php反射类ReflectionClass用法分析
2016/05/12 PHP
thinkPHP js文件中U方法不被解析问题的解决方法
2016/12/05 PHP
JS 模态对话框和非模态对话框操作技巧汇总
2013/04/15 Javascript
表单提交前触发函数返回true表单才会提交
2014/03/11 Javascript
JS实现文字向下滚动完整实例
2015/02/06 Javascript
JavaScript监听文本框回车事件并过滤文本框空格的方法
2015/04/16 Javascript
用NODE.JS中的流编写工具是要注意的事项
2016/03/01 Javascript
浅谈JavaScript 浏览器对象
2016/06/03 Javascript
JavaScript 字符串数字左补位,右补位,取固定长度,截位扩展函数代码
2017/03/25 Javascript
基于Vue过渡状态实例讲解
2017/09/14 Javascript
JS实现关键词高亮显示正则匹配
2018/06/22 Javascript
解决v-for中使用v-if或者v-bind:class失效的问题
2018/09/25 Javascript
vue2.0中set添加属性后视图不能更新的解决办法
2019/02/22 Javascript
了解javascript中的Dom操作
2019/05/27 Javascript
layui实现数据分页功能(ajax异步)
2019/07/27 Javascript
JS中自定义事件的使用与触发操作实例分析
2019/11/01 Javascript
判断JavaScript中的两个变量是否相等的操作符
2019/12/21 Javascript
详解vue中v-bind:style效果的自定义指令
2020/01/21 Javascript
基于redis的小程序登录实现方法流程分析
2020/05/25 Javascript
Python 基础知识之字符串处理
2017/01/06 Python
python多进程控制学习小结
2018/10/31 Python
Python importlib动态导入模块实现代码
2020/04/16 Python
Python实现http接口自动化测试的示例代码
2020/10/09 Python
澳大利亚个性化儿童礼品网站:Bright Star Kids
2019/06/14 全球购物
英国领先的露营和露营车品牌之一:OLPRO
2019/08/06 全球购物
美国折扣地毯销售网站:Rugs.com
2020/03/27 全球购物
主管会计岗位责任制
2014/02/10 职场文书
某某同志考察材料
2014/05/28 职场文书
大学英语专业求职信
2014/06/21 职场文书
教师作风整顿个人剖析材料
2014/10/10 职场文书
导游词之桂林
2019/08/20 职场文书
公文写作:工伤事故分析报告怎么写?
2019/11/05 职场文书
Python中Selenium对Cookie的操作方法
2021/07/09 Python
openstack中的rpc远程调用的方法
2021/07/09 Python