2012-07-28 28 views
6

Um ein grobes Beispiel ohne Code dafür zu geben, bin ich gespannt, wie ich herausfinden könnte, was beide Listen gemeinsam haben.Vergleichen von zwei Listen in Python

Beispiel:

listA = ['a', 'b', 'c'] 
listB = ['a', 'h', 'c'] 

Ich möchte in der Lage sein, zurückzukehren:

['a', 'c'] 

Wie das?

Möglicherweise mit variabler Zeichenfolgen wie:

john = 'I love yellow and green' 
mary = 'I love yellow and red' 

und Rückkehr:

'I love yellow and' 

Antwort

16

Verwenden Schnittmenge für diese:

list(set(listA) & set(listB)) 

gibt:

['a', 'c'] 

Beachten Sie, dass, da wir mit Sets handelt dieser Auftrag nicht bewahren kann:

' '.join(list(set(john.split()) & set(mary.split()))) 
'I and love yellow' 

join() unter Verwendung der resultierenden Liste in einen String zu konvertieren.

-

Für Ihr Beispiel/Kommentar unten, wird diese um (Kommentar von @DSM inspiriert) erhalten

' '.join([j for j, m in zip(john.split(), mary.split()) if j==m]) 
'I love yellow and' 

Für den Fall, dass die Liste nicht die gleiche Länge

aa = ['a', 'b', 'c'] 
bb = ['c', 'b', 'd', 'a'] 

[a for a, b in zip(aa, bb) if a==b] 
['b'] 
+0

Gibt es trotzdem, um zu bewahren? – Matthew

+2

@Matthew: was möchten Sie, dass diese Methode im Falle von '['a', 'b', 'c']' und '['c', 'b', 'd', 'a']' zurückkehrt ? – liori

+1

Ich würde gerne sehen, dass es '['b']' zurückgibt. – Matthew

2

Wenn die beiden Listen gleich lang sind, können Sie ein Side-by-Side-iterati tun: mit dem Ergebnis, wie in dem unten stehenden Kommentar angegeben auf, etwa so:

list_common = [] 
for a, b in zip(list_a, list_b): 
    if a == b: 
     list_common.append(a) 
+3

Du brauchst 'zip (list_a, list_b)', denke ich. – DSM

+0

Sie haben Recht. – CosmicComputer

+0

Sie sind nicht gleich lang. Ich könnte eine Liste haben, die ['grün'] hat und eine andere, die hat ['rot', 'gelb', 'grün'] Und ich würde es brauchen ['grün'] – Matthew

1

Intersect sie als Sätze:

set(listA) & set(listB) 
+0

Könnten Sie mir geben, ein funktionierendes Beispiel, wie ich konnte, um es bei der Verwendung von: john = ‚Ich liebe gelb und grün‘ mary = ‚Ich liebe gelb und rot‘ und Rückkehr: ‚I Liebe gelb und ' – Matthew

+0

'' '.join (str (x) für x im Satz (john.split (' ')) & set (mary.split (' ')))' – Ryan