要从两个不同的列表中删除重复的行吗?

问题描述 投票:0回答:2

我正在尝试从列表中删除重复的行,并且我在这里阅读了一些帖子,但是我没有得到想要的结果。也许是因为我在列表中混合了字符串和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],这是唯一的唯一行/集。

python-3.x numpy
2个回答
0
投票

您可以使用集合从列表中删除重复项。请注意,这是许多方法之一,也许可以使用熊猫,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]

由于列表是可变的,首先您需要将它们转换为元组,否则使用set(list1)直接将它们转换为列表将引发错误。


0
投票
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'保留在循环中,即可同时获得两者:)

© www.soinside.com 2019 - 2024. All rights reserved.