【问题标题】:How to remove duplicates from nested lists [duplicate]如何从嵌套列表中删除重复项[重复]
【发布时间】:2019-03-26 04:42:51
【问题描述】:

我有一个 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]
           ]
         ]

是否有捷径可以做到这一点,而不是相互比较每个列表。我们不能做 set(list_1),那么什么是最容易去除重复的?

P.S:这是一个 3 级嵌套,因此标记为重复问题的答案不起作用。

【问题讨论】:

  • @pistol2myhead 它只适用于 2 层嵌套,我有 3 层嵌套。

标签: python list duplicates


【解决方案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

【讨论】:

    【解决方案2】:

    我看到的一种方法是将列表展平到较低级别,然后使其变得懒惰,同时通过迭代列表列表并添加到“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]]]
    

    【讨论】:

      猜你喜欢
      • 2016-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-18
      • 1970-01-01
      • 1970-01-01
      • 2018-02-18
      • 2021-11-27
      相关资源
      最近更新 更多