首页 > 解决方案 > 如何从三维列表中删除重复项?

问题描述

我在编写哪些代码允许我通过使用列表理解从三维列表中删除重复项时遇到一些问题?这是我下面的列表和示例。

df = [[[3, 7, 9, 28],[3, 7, 9, 28],[3, 7, 9, 28],[3, 7, 17, 28],[7, 25, 27, 28], [7, 17, 21, 27, 28]],[[3, 4, 28],[4, 7, 28],[4, 7, 28],[3, 4, 28],[4, 7, 14, 28],[3, 14, 28],[3, 4, 28],[3, 7, 14, 28]],[[7, 11, 28],[3, 11, 28],[3, 7, 12, 28],[7, 11, 12, 28],[3, 11, 12, 28],[7, 25, 27, 28],[3, 7, 11, 28]]]

我希望我的结果是:

df1 = [[[3, 7, 9, 28],[3, 7, 17, 28],[7, 25, 27, 28],[7, 17, 21, 27, 28]],[[3, 4, 28],[4, 7, 28],[4, 7, 14, 28],[3, 14, 28],[3, 7, 14, 28]],[[7, 11, 28],[3, 11, 28],[3, 7, 12, 28],[7, 11, 12, 28],[3, 11, 12, 28],[3, 7, 11, 28]]]

标签: pythonpython-3.xlistmultidimensional-arrayduplicates

解决方案


您可以通过在插入列表之前检查列表是否已经存在来避免这种混乱。这样可以避免复杂的循环。

编辑:我知道这不是您直接想要的,但我认为不需要列表理解。更容易继续执行以下操作:

EDIT2:根据要求添加了排序版本。使用每个 2d 列表的索引位置作为键,并使用列表的 .sort() 功能对它们进行排序。

res = []
for dflist in df:
    df_set = set(tuple(y) for y in dflist)
    innerlist = [list(x) for x in df_set]
    innerlist.sort(key = lambda x: dflist.index(x))
    res.append(innerlist)

推荐阅读