得到兩個列表之間的差別

我在Python中有兩個列表,以下所示: python

temp1 = ['One', 'Two', 'Three', 'Four']
temp2 = ['One', 'Two']

我須要用第一個列表中的項目建立第二個列表,而第二個列表中沒有這些項目。 從示例中,我必須獲得: 函數

temp3 = ['Three', 'Four']

有沒有循環和檢查的快速方法嗎? spa


#1樓

使用如下簡單函數能夠找到兩個列表(例如list1和list2)之間的差別。 code

def diff(list1, list2):
    c = set(list1).union(set(list2))  # or c = set(list1) | set(list2)
    d = set(list1).intersection(set(list2))  # or d = set(list1) & set(list2)
    return list(c - d)

要麼 排序

def diff(list1, list2):
    return list(set(list1).symmetric_difference(set(list2)))  # or return list(set(list1) ^ set(list2))

經過使用上述函數,能夠使用diff(temp2, temp1)diff(temp1, temp2)來找到diff(temp2, temp1) 。 二者都會給出結果['Four', 'Three'] 。 您沒必要擔憂列表的順序或先給出哪一個列表。 文檔

Python文檔參考 get


#2樓

這是另外一個解決方案: hash

def diff(a, b):
    xa = [i for i in set(a) if i not in b]
    xb = [i for i in set(b) if i not in a]
    return xa + xb

#3樓

若是對difflist的元素進行排序和設置,則能夠使用幼稚的方法。 it

list1=[1,2,3,4,5]
list2=[1,2,3]

print list1[len(list2):]

或使用本機set方法: io

subset=set(list1).difference(list2)

print subset

import timeit
init = 'temp1 = list(range(100)); temp2 = [i * 2 for i in range(50)]'
print "Naive solution: ", timeit.timeit('temp1[len(temp2):]', init, number = 100000)
print "Native set solution: ", timeit.timeit('set(temp1).difference(temp2)', init, number = 100000)

天真的解決方案:0.0787101593292

本機設置解決方案:0.998837615564


#4樓

arulmr解決方案的單行版本

def diff(listA, listB):
    return set(listA) - set(listB) | set(listA) -set(listB)

#5樓

若是遇到TypeError: unhashable type: 'list' ,則須要將列表或集合轉換爲元組,例如

set(map(tuple, list_of_lists1)).symmetric_difference(set(map(tuple, list_of_lists2)))

另請參閱如何在python中比較列表/集合的列表?

相關文章
相關標籤/搜索