2013-03-16 32 views
31

Potrzebuję porównać dwie listy w Pythonie, i wiem o użyciu polecenia set, aby znaleźć podobne przedmioty, ale czy istnieje inne polecenie, które mógłbym użyć, aby automatycznie porównać je, zamiast konieczności kodowania?Python - Użyj 'set', aby znaleźć różne pozycje na liście

Chciałbym znaleźć przedmioty, których nie ma w każdym z nich. Powiedzieć jedna lista jest następująca:

[1, 2, 3, 4, 5, 6] 

i lista dwa to:

[1, 2, 3, 4, 6] 

Chcę znaleźć że 5 brakuje na liście, z nadzieją przez komendę, ale wiem, jak pętla przez porównanie.

+6

Co trzeba porównać? Czy potrzebujesz znaleźć pasujące przedmioty? Co dokładnie musisz zrobić? –

+4

Ugh, nie trzeba jeszcze głosować, aby zamknąć. Daj OP szansę na zmodyfikowanie pytania i zapewnienie kontekstu. –

+0

Chodzi mi o to, że chciałbym znaleźć przedmioty, których nie ma w każdym z nich. Powiedzmy, że jedna z nich jest następująca: [1, 2, 3, 4, 5, 6] i druga lista to: [1, 2, 3, 4, 6]. Chcę odkryć, że na liście brakuje 5, mam nadzieję, że jest to polecenie, ale wiem, jak przechodzić przez porównywanie –

Odpowiedz

25

Wygląda jak trzeba symetryczną różnicę:

a = [1,2,3] 
b = [3,4,5] 

print(set(a)^set(b)) 


>>> [1,2,4,5] 
43

docs są dobrym miejscem, aby rozpocząć. Oto kilka przykładów, które mogą pomóc w określeniu sposobu porównywania zestawów.

Aby znaleźć przecięcia (elementy, które są w obu zestawach):

>>> a = set([1, 2, 3, 4, 5, 6]) 
>>> b = set([4, 5, 6, 7, 8, 9]) 
>>> a & b 
set([4, 5, 6]) 

aby znaleźć różnicę (przedmiotów, które tylko w jednym zestawie):

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

Aby zobaczyć różnicę symetryczną (elementy, które są w jednej lub drugiej, ale nie obie):

>>> a = set([1, 2, 3, 4, 5, 6]) 
>>> b = set([4, 5, 6, 7, 8, 9]) 
>>> a^b 
set([1, 2, 3, 7, 8, 9]) 

Nadzieję, że pomaga.

+0

Dziękuję! Będę o tym pamiętał i poparłem go, gdy dostanę 15 rep-rzeczy, jest to _ ** bardzo ** _ dobrze zrobiony post. Dzięki! –

3

Prosty listowego

In [1]: a=[1, 2, 3, 4, 5, 6] 

In [2]: b=[1, 2, 3, 4, 6] 

In [3]: [i for i in a if i not in b] 
Out[3]: [5] 
+0

Wyszukuje elementy, które nie są w b, zamiast znajdować elementy nie w każdym z nich. Różnica jest taka sama, ale nie symetryczna. – Spaceghost

+0

@Spaceghost - true. Po prostu użyłem przykładu OP-owego prosto od –

+0

OP poprosił o przedmioty nie w każdym z nich. W przeciwnym razie, przegłosowałbym to. – Spaceghost

Powiązane problemy