2012-08-24 58 views
1

我試圖找到2個列表之間的區別。基本上,我想知道的一切,這是在列表1不在列表2來解釋它的最好辦法,是用一個例子:如何比較2個列表並返回差異? (Python中的差異函數不會返回我需要的)

List1 = [a, a, b, c, d, e] 
List2 = [a, b, c, d] 

In this example, I would like a function that would return [a, e] 

當我在Python中使用的不同的功能,它不僅會返回「e」,而不是列表1中有一個額外的「a」。當我簡單地在兩個列表之間使用XOR時,它也只返回「e」。

+0

順序對您是否重要? – DSM

+0

順序無關緊要。謝謝! – user1618063

回答

8

你想要的是真的不設置減法。您可以使用Counter

>>> List1 = ['a', 'a', 'b', 'c', 'd', 'e'] 
>>> List2 = ['a', 'b', 'c', 'd'] 
>>> import collections 
>>> counter = collections.Counter(List1) 
>>> counter.subtract(List2) 
>>> list(counter.elements()) 
['a', 'e'] 
+0

那麼,至少我可以添加這麼多:'Counter(List1)-Counter(List2)'也可以。我們在這裏很幸運,因爲OP只希望1中的成員不在2中(否則減法將在2中失去'f')。 – DSM

+0

我不確定我是否遵循 - 什麼情況下''.subtract''與'Counter-Counter''不同? – jterrace

+0

@jterrace - 'subtract'不需要賦予'Counter'的實例。它主要是讀取代碼的方式:'Counter(List1).subtract(List2)'vs'Counter(List1) - Counter(List2)'。第一種情況可能會有一些(小的)性能提升,但第二種情況可能稍微好一些? – mgilson

1

假設List1List2一個嚴格的超:

for i in List2: 
    if i in List1: 
     List1.remove(i) 
# List1 is now ["a", "e"] 

(您可以克隆List1,如果你不想做它在的地方。)

+0

這似乎是'try/except'的地方。沒有意義在List1中查找兩次。 – mgilson

+0

這一個很容易爲我工作。非常感謝你的提交! – user1618063

相關問題