首页 > 解决方案 > 删除列表中存在的重复整数列表,而不考虑整数列表的排序

问题描述

l1 = [[1, 2, -1], [1, 0, 1], [2, 1, -1], [1, -1, 2]]

对于我的情况 [1, 2, -1],被认为等于[2, 1, -1]等于[1, -1, 2]。本质上,订购并不重要。

[1, 2, -1] = [2, 1, -1] = [1, -1, 2]

在上述情况下,我只需要保留这 3 个中的 1 个(这三个中的任何一个都可以)。

因此,删除重复项后,列表现在必须具有l1 = [[1, 2, -1], [1, 0, 1]]orl1 = [[2, 1, -1], [1, 0, 1]]l1 = [[1, -1, 2], [1, 0, 1]]

我已经尝试对单个列表进行排序(但这让我失去了看到三胞胎的顺序)并将每个单独的列表放入字典中(TypeError: unhashable type: 'list'

笔记:

当我说“不考虑整数列表的排序”时,我的意思是如果我的列表中有 3 个列表具有相同的整数,那么排序不同?这3个列表被认为是相同的!您可以从这 3 个列表中删除 2 个,但保留未删除列表的顺序,

我举了一个例子,表明对于我的 list 列表l1 = [[1, 2, -1], [1, 0, 1], [2, 1, -1], [1, -1, 2]][[-1, 1, 2], [0, 1, 1]]是不可接受的,因为[-1, 1, 2]它实际上并没有以那个确切的顺序出现在原始数组中![-1, 1, 2] = [1, 2, -1] = [2, 1, -1] = [1, -1, 2]是真的!如果我的清单中有这 4 个元素。但是,我的列表中没有 [-1, 1, 2] !

也很重要:

我的整数列表中可能有重复的元素。

l1 = [[1, 0, 0], [0, 1, 0], [-1, 0, 1]]

这里:[1, 0, 0]= [0, 1, 0],当返回我的输出时,我需要删除这两个中的一个。

我要强调的一点是,2这些单独的列表中有零(我认为这也是重要的细节)。

标签: pythonpython-3.xduplicatesnested-lists

解决方案


您可以使用对列表进行排序sorted,然后检查并附加到结果。

前任:

l1 = [[1, 2, -1], [1, 0, 1], [2, 1, -1], [1, -1, 2]]
checkVal = []
r = []
for i in l1:
    val = sorted(i)
    if val not in checkVal:
        checkVal.append(val)
        r.append(i)
print(r)

输出:

[[1, 2, -1], [1, 0, 1]]

推荐阅读