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