Python 是否从两个不同的列表中删除重复行?

Python 是否从两个不同的列表中删除重复行?,python,python-3.x,list,numpy,tuples,Python,Python 3.x,List,Numpy,Tuples,我试图在一个列表中找到另一个列表中不存在的独特元素,我在这里读过一些帖子,但我没有得到想要的结果。也许是因为我在列表中混合了字符串和int import requests import numpy as np list1 = [['dog', 123, -10],['cat', 44, -5],['rabbit', 99, 2]] list2 = [['dog', 123, -10],['parrot', 44, -5],['rabbit', 99, 2]] #What we should

我试图在一个列表中找到另一个列表中不存在的独特元素,我在这里读过一些帖子,但我没有得到想要的结果。也许是因为我在列表中混合了字符串和int

import requests
import numpy as np


list1 = [['dog', 123, -10],['cat', 44, -5],['rabbit', 99, 2]]
list2 = [['dog', 123, -10],['parrot', 44, -5],['rabbit', 99, 2]]

#What we should be left with is ['parrot', 44, -5]

mixem = list1+list2

data = np.array(mixem)

new_array = [tuple(row) for row in data]
uniques = np.unique(new_array)

我做错了什么?我想留下的是
['parrot',44,-5]
,这是唯一唯一唯一的行/集。

您可以使用集从列表中删除重复项。请注意,这是很多方法中的一种,可能是用熊猫、numpy等

#given list
list1 = [['dog', 123, -10],['cat', 44, -5],['rabbit', 99, 2]]
list2 = [['dog', 123, -10],['parrot', 44, -5],['rabbit', 99, 2]]

#convert the list to set
set1 = set((tuple(row) for row in list1))
set2 = set((tuple(row) for row in list2))

#use symmetric difference to find the unique elements
s = set1.symmetric_difference(set2) #this will return a set

#to convert back to list
list3 = [list(ele) for ele in s]
由于列表是可变的,首先需要将它们转换为tuple,否则使用
set(list1)
将它们直接转换为list将抛出错误

for i,j in zip(list1,list2):
  if i!=j:
    print(i)
    print(j)

Output:-
['cat', 44, -5]
['parrot', 44, -5]

如果你只想要“['parrot,44,-5]”的话,用这个你现在就可以得到这两个,只要把“j”放在循环中:)

好吧,你不需要numpy来完成你想要做的事情

只需使用for循环即可获得所需的结果:

list1 = [['dog', 123, -10],['cat', 44, -5],['rabbit', 99, 2]]
list2 = [['dog', 123, -10],['parrot', 44, -5],['rabbit', 99, 2]]

uniques=[]
for i,j in zip(list1,list2):
  if i!=j:
      uniques.append(j)

print(uniques)
要回答为什么np.unique()不能获得唯一元组的问题,是因为您错误地理解了它在您的案例中的实际工作方式

请注意,当您执行:data=np.array(mixem)时,它实际上会创建一个numpy矩阵,因此当您执行np.unique()时,它会生成numpy矩阵中的所有唯一元素

>>> data
>>> array([['dog', '123', '-10'],
       ['cat', '44', '-5'],
       ['rabbit', '99', '2'],
       ['dog', '123', '-10'],
       ['parrot', '44', '-5'],
       ['rabbit', '99', '2']], dtype='<U6')
因此,uniques[]包含:

>>> uniques = np.unique(new_array)
>>> uniques
array(['-10', '-5', '123', '2', '44', '99', 'cat', 'dog', 'parrot',
       'rabbit'], dtype='<U6')
>uniques=np.unique(新数组)
>>>独特的
数组(['-10','-5',123',2',44',99',猫,狗,鹦鹉',
'rabbit'],dtype='>>uniques=np.unique(新数组,axis=0)
>>>独特的
数组(['cat','44','-5'],
[dog'、'123'、'-10'],
[‘鹦鹉’、‘44’、‘5’],

['rabbit'、'99'、'2']],dtype='非常感谢,不仅为您提供了解决问题的答案,还为您提供了解释。我很高兴能帮助您!!:)仅当列表按相同顺序排列时,此选项才起作用。否则,它会起作用not@Onyambu为了避免这种情况,只需在另一个循环上运行一个循环,即J在i上,而不是像Answare中所示的那样同时运行。您不需要两个循环。您需要
[i在列表2中,如果我不在列表1中,则在列表2中运行i]
>>> uniques = np.unique(new_array)
>>> uniques
array(['-10', '-5', '123', '2', '44', '99', 'cat', 'dog', 'parrot',
       'rabbit'], dtype='<U6')
>>> uniques = np.unique(new_array, axis=0)
>>> uniques
array([['cat', '44', '-5'],
       ['dog', '123', '-10'],
       ['parrot', '44', '-5'],
       ['rabbit', '99', '2']], dtype='<U6')