删除重复的嵌套列表Python依赖于位置



在像下面这样的嵌套列表中,我想根据位置删除重复项。

[[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

谢谢!

编辑2:对不起,大家,输入是错误的,所以代码只是不能工作…

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]]

相关内容

  • 没有找到相关文章

最新更新