W tym tutorialu poznamy dwa pythonowskie sposoby na znalezienie różnicy między dwiema listami. Jedną z metod jest użycie Python Set. Najpierw konwertuje ona listy na zbiory, a następnie pobiera z nich unikalne elementy.
Inne metody nie wykorzystujące zbiorów porównują dwie listy element po elemencie i zbierają te unikalne. Możemy je zaimplementować za pomocą zagnieżdżonych pętli for oraz za pomocą list comprehension.
Na marginesie, jeśli nie jesteś świadomy zestawów w Pythonie, skorzystaj z poniższego tutoriala. Szybko wprowadzi Cię on do tego, jak Python implementuje matematyczną formę zestawu.
Python Set
Pythonic Ways to Find the Difference Between Two Lists
Python Set wydaje się być najbardziej oczywistym wyborem do identyfikacji wspólnej jak i różnicy dwóch list. Tak więc, zamierzamy zbadać go najpierw, a następnie użyjemy zagnieżdżonych pętli i zrozumienia listy.
Zanim przejdziemy do części z rozwiązaniem, zdefiniujmy parametry testu, tj, dwie listy, których różnicę musimy znaleźć.
# Test Inputlist_a = list_b =
I chcemy, aby nasze rozwiązanie dało następujące dane wyjściowe:
# Expected Result# list_out = list_a - list_blist_out =
Zacznijmy tworzyć program do znajdowania różnicy między dwiema listami, najpierw używając zestawów.
Use set() to find the difference of two lists
W tym podejściu, najpierw utworzymy dwa zestawy SET (powiedzmy set1 i set2) z list (powiedzmy list1 i list2), przekazując je do funkcji set(). Następnie wykonamy operację różnicy zestawów. Zwróci ona te elementy z listy1, które nie istnieją w drugiej.
Tutaj jest przykładowy program Pythona do uzyskania różnicy dwóch list.
"""Desc: Using set() to find the difference between two lists in Python"""def list_diff(list1, list2): return (list(set(list1) - set(list2))) # Test Inputlist1 = list2 = # Run Testprint(list_diff(list1, list2))
Po uruchomieniu tego, powinieneś zobaczyć następujący wynik:
Bez set(), używając zagnieżdżonych pętli
W tej metodzie, użyjemy zagnieżdżonej pętli For do porównania każdego elementu pierwszej listy z drugą. A podczas przesuwania, będziemy dołączać każdy niepasujący element do nowej (i pustej) listy.
Nowa lista zawierałaby w końcu różnicę między dwoma podanymi sekwencjami. Poniżej znajduje się przykładowy program demonstrujący to podejście.
"""Desc: Nested loop to find the difference between two lists in Python"""def list_diff(list1, list2): out = for ele in list1: if not ele in list2: out.append(ele) return out# Test Inputlist1 = list2 = # Run Testprint(list_diff(list1, list2))
Po uruchomieniu powyższego programu, powinieneś zobaczyć następujący wynik:
Bez set(), używając zrozumienia listy
Jest to prawie podobna technika, której użyliśmy w poprzednim. Tutaj zastąpiliśmy zagnieżdżone pętle składnią list comprehension.
Zobacz przykład poniżej.
"""Desc: List comprehension to find the difference between two lists in Python"""def list_diff(list1, list2): out = return out# Test Inputlist1 = list2 = # Run Testprint(list_diff(list1, list2))
Po uruchomieniu powyższego programu, powinieneś zobaczyć następujący wynik: