List 从二维列表中删除重复项

List 从二维列表中删除重复项,list,python-3.x,unique,nested-lists,List,Python 3.x,Unique,Nested Lists,我在python中搜索了一个从两个2d列表中删除deplicates的解决方案,但我找不到,所以我的问题是: 例如,我有两个列表 [[1,2],[3,5],[4,4],[5,7]] [[1,3],[4,4],[3,5],[3,5],[5,6]] 预期结果: [[1,2],[1,3],[5,7],[5,6]] 我想删除列表中与另一个列表的值完全匹配的列表 我的脚本: def filter2dim(firstarray, secondarray): unique = [] fo

我在python中搜索了一个从两个2d列表中删除deplicates的解决方案,但我找不到,所以我的问题是:
例如,我有两个列表

[[1,2],[3,5],[4,4],[5,7]]

[[1,3],[4,4],[3,5],[3,5],[5,6]]
预期结果:

[[1,2],[1,3],[5,7],[5,6]]
我想删除列表中与另一个列表的值完全匹配的列表

我的脚本:

def filter2dim(firstarray, secondarray):
    unique = []
    for i in range(len(firstarray)):
       temp=firstarray[i]
       for j in range(len(secondarray)):
           if(temp == secondarray[j]):
              break
           elif(j==(len(secondarray)-1)):
               unique.append(temp)
    for i in range(len(secondarray)):
       temp=secondarray[i]
       for j in range(len(firstarray)):
           if(temp == firstarray[j]):
              break
           elif(j==(len(firstarray)-1)):
               unique.append(secondarray[i])
    return 
如果你能修好它并解释一下你做了什么,那就太好了。
谢谢,致以最诚挚的问候

用元组替换两项列表,您可以使用集合操作(因为元组是不可变的,列表不是,集合项必须是不可变的):

注意,这也会删除每个列表中的重复项,因为它们是集合,并且忽略顺序

如果您需要通过编程将列表转换为元组,列表理解就可以了:

list_a = [[1,2],[3,5],[4,4],[5,7]]
set_a = {(i, j) for i, j in list_a}
print(set_a) # {(1, 2), (4, 4), (5, 7), (3, 5)}   

将2项列表替换为元组,您可以使用集合操作(因为元组是不可变的,列表不是,集合项必须是不可变的):

注意,这也会删除每个列表中的重复项,因为它们是集合,并且忽略顺序

如果您需要通过编程将列表转换为元组,列表理解就可以了:

list_a = [[1,2],[3,5],[4,4],[5,7]]
set_a = {(i, j) for i, j in list_a}
print(set_a) # {(1, 2), (4, 4), (5, 7), (3, 5)}   

将2项列表替换为元组,您可以使用集合操作(因为元组是不可变的,列表不是,集合项必须是不可变的):

注意,这也会删除每个列表中的重复项,因为它们是集合,并且忽略顺序

如果您需要通过编程将列表转换为元组,列表理解就可以了:

list_a = [[1,2],[3,5],[4,4],[5,7]]
set_a = {(i, j) for i, j in list_a}
print(set_a) # {(1, 2), (4, 4), (5, 7), (3, 5)}   

将2项列表替换为元组,您可以使用集合操作(因为元组是不可变的,列表不是,集合项必须是不可变的):

注意,这也会删除每个列表中的重复项,因为它们是集合,并且忽略顺序

如果您需要通过编程将列表转换为元组,列表理解就可以了:

list_a = [[1,2],[3,5],[4,4],[5,7]]
set_a = {(i, j) for i, j in list_a}
print(set_a) # {(1, 2), (4, 4), (5, 7), (3, 5)}   

你的脚本适合我,只需添加:
return unique
你的脚本适合我,只需添加:
return unique
你的脚本适合我,只需添加:
return unique
你的脚本适合我,只需添加:
return unique
将第一个列表变成一个
dict

a = [[1, 2], [3, 5], [4, 4], [5, 7]]
b = [[1, 3], [4, 4], [3, 5], [3, 5], [5, 6]]

filt = dict(a)
result = [el for el in b if el[0] in filt and el[0] == filt[el[0]]]
或者,将第一个列表转换为一组元组,只需检查成员身份:

filt = set(map(tuple, a))
result = [el for el in b if tuple(el) in filt]

这两种解决方案都避免了多次遍历第一个列表,因为
dict
set
查找是O(1)。

将第一个列表转换为
dict

a = [[1, 2], [3, 5], [4, 4], [5, 7]]
b = [[1, 3], [4, 4], [3, 5], [3, 5], [5, 6]]

filt = dict(a)
result = [el for el in b if el[0] in filt and el[0] == filt[el[0]]]
或者,将第一个列表转换为一组元组,只需检查成员身份:

filt = set(map(tuple, a))
result = [el for el in b if tuple(el) in filt]

这两种解决方案都避免了多次遍历第一个列表,因为
dict
set
查找是O(1)。

将第一个列表转换为
dict

a = [[1, 2], [3, 5], [4, 4], [5, 7]]
b = [[1, 3], [4, 4], [3, 5], [3, 5], [5, 6]]

filt = dict(a)
result = [el for el in b if el[0] in filt and el[0] == filt[el[0]]]
或者,将第一个列表转换为一组元组,只需检查成员身份:

filt = set(map(tuple, a))
result = [el for el in b if tuple(el) in filt]

这两种解决方案都避免了多次遍历第一个列表,因为
dict
set
查找是O(1)。

将第一个列表转换为
dict

a = [[1, 2], [3, 5], [4, 4], [5, 7]]
b = [[1, 3], [4, 4], [3, 5], [3, 5], [5, 6]]

filt = dict(a)
result = [el for el in b if el[0] in filt and el[0] == filt[el[0]]]
或者,将第一个列表转换为一组元组,只需检查成员身份:

filt = set(map(tuple, a))
result = [el for el in b if tuple(el) in filt]



这两种解决方案都避免了多次重复第一个列表,因为
dict
set
查找是O(1)。

为什么
[1,2]
不在结果中?哦,是的,[1,2]对不起
[5,6]
被包括在复制品中?对你来说维持秩序很重要吗?我的脚本只处理小列表,但当有大列表时,它会混淆。为什么结果中没有
[1,2]
?哦,是的,[1,2]很抱歉
[5,6]
被包括在复制品中?对你来说维持秩序很重要吗?我的脚本只处理小列表,但当有大列表时,它会混淆。为什么结果中没有
[1,2]
?哦,是的,[1,2]很抱歉
[5,6]
被包括在复制品中?对你来说维持秩序很重要吗?我的脚本只处理小列表,但当有大列表时,它会混淆。为什么结果中没有
[1,2]
?哦,是的,[1,2]很抱歉
[5,6]
加入复制品?维持订单对您来说重要吗?我的脚本正在处理小列表,但是当有一个大的列表时,它会混淆。嗯,对不起,我不太熟悉python如何将它们转换为元组?@user2597549刚刚用这个答案编辑了这个问题。好的,你能给我一些时间来测试一下吗。谢谢一个简单的问题,如果第一个列表是空的,它会导致任何问题吗?您也会这样做,但是使用列表而不是集合和元组:
list_a=[[i,j]表示集合中的i,j]
hmm抱歉,我不太熟悉python如何将它们转换为元组?@user2597549刚刚用这个答案编辑了这个问题。好的,请给我一些时间测试一下。谢谢一个简单的问题,如果第一个列表是空的,它会导致任何问题吗?您也会这样做,但是使用列表而不是集合和元组:
list_a=[[i,j]表示集合中的i,j]
hmm抱歉,我不太熟悉python如何将它们转换为元组?@user2597549刚刚用这个答案编辑了这个问题。好的,请给我一些时间测试一下。谢谢一个简单的问题,如果第一个列表是空的,它会导致任何问题吗?您也会这样做,但是使用列表而不是集合和元组:
list_a=[[i,j]表示集合中的i,j]
hmm抱歉,我不太熟悉python如何将它们转换为元组?@user2597549刚刚用这个答案编辑了这个问题。好的,请给我一些时间测试一下。谢谢你一个简单的问题,如果第一个列表是空的,它会导致任何问题吗?你也会这样做,但是使用列表而不是集合和元组:
list\u a=[[i,j]for i,j in set\u a]
是的,我知道,但有时我的列表会混合1000个值是的,我知道,但有些