2015-06-17 6 views
6

Wenn ich ein Element haben allein das ist einfach:Wie überprüft man, ob ein Element aus Liste A in Liste B in Python nicht vorhanden ist?

 
>>> 3 not in [2, 3, 4] 
False 
>>> 3 not in [4, 5, 6] 
True 

Aber was, wenn ich zwei Listen und müssen prüfen, ob die Elemente in der Liste A in der Liste auftreten B?

A=[1,2,3,4] 
B=[4,5,6,7] 

Wie bekomme ich ein Ergebnis zeigt mir, dass 1, 2, 3 sind nicht in der Liste B?

+1

Diese Frage eine Million Mal gefragt wurde. –

+0

mögliches Duplikat von [Suche nach Elementen, die nicht in einer Liste enthalten sind] (http://stackoverflow.com/questions/2104305/finding-elements-not-in-a-list) –

Antwort

1

Mit Liste Verständnis:

truthy Antwort

any([True for x in [1, 2, 3, 4] if x in [4, 5, 6, 7]]) 

Liste der Elemente, die nicht in der zweiten Liste

[x for x in [1, 2, 3, 4] if x not in [4, 5, 6, 7]] 
+0

Bitte erläutern Sie Ihre Antwort, damit der Fragesteller verstehen kann, wie Es klappt. – SuperBiasedMan

0

Das für Boolesche Operationen auf Sätze ein typischer Fall ist:

zerotonine = set(range(10)) 
fourtoten = set(range(4,11)) 
print "exclusively in one:", zerotonine^fourtoten 
exclusively in one: set([0, 1, 2, 3, 10]) 
4

wenn die Elemente in der Liste sind hashable:

>>> set(A) - set(B) 
{1, 2, 3} 

sonst, können Sie filter Funktion:

>>> list(filter(lambda a: a not in B, A)) 
[1, 2, 3] 

in diesem Fall, wenn B sortiert ist, können Sie eine besser Leistung mit bisect.bisect_left logarithmisch zu suchen:

1

Sie können set verwenden.

z.B.

>>> a=[1,2,3,4] 
>>> b=[4,5,6,7] 
>>> list(set(a)-set(b)) 
[1, 2, 3] 
>>> 
3

Sie können auch Liste Verständnis verwenden:

C=[i for i in A if i not in B] 

Ausgang:

[1, 2, 3] 
1
set(A).difference(B) # set operation for difference between two collections A and B 
Verwandte Themen