从嵌套列表中删除重复项

时间:2016-06-17 23:20:43

标签: python list

我有一个列表列表,想要从中删除重复项。我有办法工作,但它看起来很难看,我不确定是否有更好的方法。

a_list = [[1,2],[2,3],[1,2]]
print [list(tup) for tup in set([tuple(x) for x in a_list])]

打印:

[[1,2],[2,3]]

这就是我想要的。我正在使用小清单,所以我不关心速度,但如果有更好的方法,我会感兴趣。

3 个答案:

答案 0 :(得分:1)

你可以缩短一点:

print list(set(tuple(x) for x in a_list))

输出:

[(1, 2), (2, 3)]

如果您对显示格式不那么担心,那么只需取消最外面的列表转换,即可:

set([(1, 2), (2, 3)])

我在目前为止给出的三个答案上运行了一个计时器,使用/ usr / shar / dict / words作为每个元组的第二部分,第一个元素使用简单的 1 。该文件有近五十万(479,829)个字。

0.517719984055 list-> set-> list(您的原始代码) 1.30243611336 list-> set-> map(tmajest' s suggestion) ???建立新的名单(萨尔曼的建议)

最后一个还没有超过6分钟的运行时间。 顶部确实表明它仍然可以完全使用一个CPU。

答案 1 :(得分:0)

>>> a_list=[[1,2],[2,3],[1,2]]
>>> newlist=[]
>>> for each in a_list:
        if each not in newlist:
            newlist.append(each)


>>> newlist
[[1, 2], [2, 3]]

制作一个新的空列表。如果新列表中没有来自a_list的任何列表,请将其附加到新列表。希望这可以帮助。 :)

答案 2 :(得分:0)

如果最终结果必须是列表,那么实际上并没有更短的方式。如果需要,可以使用map而不是list comprehensions:

list(map(list, set(map(tuple, a_list))))