根据位置删除重复的嵌套列表 Python

Remove duplicates nested list Python dependend on position

在如下所示的嵌套列表中,我想根据位置删除重复项。

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

所以每个子列表都包含相同的数字,但顺序不同。如果数字的顺序相同,我想删除这个重复项。所以上面的列表应该是这样的:

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

我尝试过自己写一些代码,但是由于我是初学者,所以没有工作结果。我试过:

result = []
for i in test_list:
    if i not in result:
        result.append(i)
return result

tpls = [tuple(x) for x in test_list]
dct = list(dict.fromkeys(tpls))
dup_free = [list(x) for x in test_list]
return dup_free

谢谢!

EDIT2:对不起大家,输入错误所以代码无法运行...

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

new_lst = []
for a in lst:
    if a not in new_lst: # check if current element already in the new_lst or not.
        new_lst.append(a)
print(new_lst)

输出

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

您可以使用 pandas 来达到这个目的。

import pandas as pd

aaa = {'date': ['2022-05-02', '2022-04-29', ' 2022-04-29', '2022-04-28 ', '2022-04-28 ', '2022-04-28 '],
       'id': ['A', 'A', 'B', 'A', 'B', 'C'], 'number': [397177, 53876, 191214, 75824, 483860, 51731]}

df = pd.DataFrame(aaa)
df = df.drop_duplicates().values

输出

[[1 2 3 4]
 [2 1 3 4]
 [1 3 2 4]]

第一个有效运行这段代码:

X = [[1,2,3,4], [2,1,3,4], [1,2,3,4], [1,3,2,4]]

def Rem_Dup(L) :
    result = []
    for i in L:
        if i not in result:
            result.append(i)
    return result

print(Rem_Dup(X))

对于原始嵌套列表中的每个子列表sublst,转换成元组以便在字典dct中查找。添加到没有重复的结果列表中 nodups 仅当我们没有看到它时:

lst = [[1,2,3,4], [2,1,3,4], [1,2,3,4], [1,3,2,4]]
nodups = []
dct = {}

for sublst in lst:
    tup = tuple(sublst)
    if tup not in dct:
        dct[tup] = 1
        nodups.append(sublst)
    else:
        pass
print(nodups)
# [[1, 2, 3, 4], [2, 1, 3, 4], [1, 3, 2, 4]]

你可以用列表理解在一行中完成:

a = [[1,2,3,4], [2,1,3,4], [1,2,3,4], [1,3,2,4]]
[j for i, j in enumerate(a) if j not in a[i+1:]]

输出:

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

注意:如果您关心顺序,这将选择原始列表中该子列表的最后一次出现

编辑:如果你关心排序,你可以向后遍历列表,然后反转结果:

[j for i, j in enumerate(reversed(a)) if j not in list(reversed(a))[i+1:]][::-1]

输出:

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