本文主要介绍python中列表去重的各种方法。本文中重复数据删除的前提是保持顺序不变。本文给出了多种实现方法,有需要的朋友可以参考一下。
今天遇到了一个问题。在同事的随机提示下,我用了itertools.groupby这个函数.但是这个东西最后没用。
问题是对一个列表中的新闻id进行去重,并保证去重后顺序不变。
直观方法
最简单的想法是:
复制代码如下:
ids=[1,2,3,3,4,2,3,4,5,6,1]
news_ids=[]
对于ids中的id:
如果id不在news_ids中:
news_ids.append(id)
打印新闻_ 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))
新闻_标识.排序(标识.索引)
使用itertools.grouby
文章开头提到了Itertools.grouby。如果不考虑列表顺序,可以用这个:
复制代码如下:
ids=[1,4,3,3,4,2,3,4,5,6,1]
ids.sort()
it=itertools.groupby(ids)
对于其中的k,g:
打印k
itertools.groupby的原理可以在这里找到:http://docs.python.org/2/library/ITERTools.html # ITER tools . group by
网友补充:用reduce
网友reatlk留言寻求另一种解决方案。我在这里补充并解释道:
复制代码如下:
在[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)
输出[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]。
实际上,想法是将id改为[[],1,4,3,]然后利用reduce的特性。请看这里简化解释:http://docs.python.org/2/library/functions.html#reduce.
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。