Python 是否从两个不同的列表中删除重复行?
我试图在一个列表中找到另一个列表中不存在的独特元素,我在这里读过一些帖子,但我没有得到想要的结果。也许是因为我在列表中混合了字符串和intPython 是否从两个不同的列表中删除重复行?,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
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')