在像下面这样的嵌套列表中,我想根据位置删除重复项。
[[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]]