,,python中对list去重的多种方法

,,python中对list去重的多种方法

本文主要介绍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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: