2012-07-28 7 views
6

Aby dać przykład z grubsza, bez kodu napisanego na ten temat, jestem ciekawa, w jaki sposób będę w stanie dowiedzieć się, co mają obie te listy wspólne.Porównywanie dwóch list w Pythonie

Przykład:

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

Chciałbym móc wrócić:

['a', 'c'] 

Jak to?

ewentualnie z ciągów zmiennych takich jak:

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

i powrót:

'I love yellow and' 

Odpowiedz

16

Zastosowanie zestaw przecięcie tego:

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

daje:

['a', 'c'] 

Zauważ, że skoro mamy do czynienia z zestawów to może niezachować porządek:

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

użyciu join() przekonwertować wynikowej liście do łańcucha.

-

Dla przykładu/komentarzu poniżej, to zachowa kolejność (zainspirowany komentarzem z @DSM)

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

Dla przypadku, gdy lista nie są tej samej długości , w związku z czym, jak określono w poniższej komentarz:

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

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

Czy mimo to zachować porządek? – Matthew

+2

@Matthew: co chciałbyś zwrócić tej metody w przypadku '['a', 'b', 'c']' i '['c', 'b', 'd', 'a']' ? – liori

+1

Chciałbym zobaczyć, jak zwraca '['b']'. – Matthew

2

Jeśli oba wykazy są tej samej długości, można zrobić side-by-side iterati o, tak:

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

Musisz użyć 'zip (list_a, list_b)', myślę. – DSM

+0

Masz rację. – CosmicComputer

+0

Nie mają tej samej długości. Mogę mieć jedną listę, która ma ["zielony"] i inny, który ma ["czerwony", "żółty", "zielony"] I potrzebowałbym go, aby wrócić ["zielony"] – Matthew

1

Przecięcie nich zestawach:

set(listA) & set(listB) 
+0

Czy możesz dać mi przykład pracuje nad jak mogłem o używaniu go z: john = „Kocham żółty i zielony” mary = „Kocham żółty i czerwony” i powrót: „I miłość żółta i ' – Matthew

+0

'' '.join (str (x) dla x w zestawie (john.split (' ')) i zestaw (mary.split (' ')))' – Ryan