如何从嵌套列表中删除重复项

时间:2019-03-26 04:42:52

标签: python list duplicates

我有一个列表,如list<list<list>>列表,要删除重复的列表。

list_1 = [
           [
             [1,2],[2,3]
           ],
           [
             [3,4],[5,6]
           ],
           [
             [3,4], [5,6]
           ]

         ]

因此预期输出应为

output = [
           [
             [1,2],[2,3]
           ],
           [
             [3,4],[5,6]
           ]
         ]

是否有捷径可做,而不是将每个列表相互比较。我们无法设置(list_1),那么删除重复项最容易的是什么?

P.S:这是3级嵌套,因此标记为重复问题的答案无效。

2 个答案:

答案 0 :(得分:1)

您可以尝试

k = [
           [
             [1,2],[2,3]
           ],
           [
             [3,4],[5,6]
           ],
           [
             [3,4], [5,6]
           ]

         ]

import itertools
k.sort()
list(k for k,_ in itertools.groupby(k))
[[[1, 2], [2, 3]], [[3, 4], [5, 6]]]

有关详细信息,您可以在这里https://stackoverflow.com/a/2213973/4320263

答案 1 :(得分:0)

我看到它的一种方法是,将列表展平到较低的水平,然后通过迭代列表列表并添加到“ seen”集中列表,使其变得懒惰,同时保留顺序:

lst = [ [[1,2],[2,3]], [[3,4],[5,6]], [[3,4], [5,6]] ]

from toolz import unique

flat_list = [item for sublist in lst for item in sublist]
res = map(list, unique(map(tuple, flat_list)))
print(list(res))

输出

[[1, 2], [2, 3], [3, 4], [5, 6]]

编辑

如果您想返回嵌套列表,请每2个元素配对:

print([res[i:i+2] for i in range(0, len(res), 2)])

输出

[[[1, 2], [2, 3], [3, 4]], [[5, 6]]]