我正在尝试从列表中删除重复的行,并且我在这里阅读了一些帖子,但是我没有得到想要的结果。也许是因为我在列表中混合了字符串和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]
由于列表是可变的,首先您需要将它们转换为元组,否则使用set(list1)
直接将它们转换为列表将引发错误。
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'保留在循环中,即可同时获得两者:)