TL; DR:
ROZWIĄZANIE (1)
import numpy as np
main_list = np.setdiff1d(list_2,list_1)
# yields the elements in `list_2` that are NOT in `list_1`
ROZWIĄZANIE (2) Chcesz posortowaną listę
def setdiff_sorted(array1,array2,assume_unique=False):
ans = np.setdiff1d(array1,array2,assume_unique).tolist()
if assume_unique:
return sorted(ans)
return ans
main_list = setdiff_sorted(list_2,list_1)
Objaśnienia:
(1) Można użyć NumPy użytkownika setdiff1d( array1, array2, assume_unique= False).
assume_uniquepyta użytkownika, JEŻELI tablice SĄ JUŻ UNIKALNE.
Jeśli False, to unikalne elementy są określane jako pierwsze.
Jeśli Truefunkcja przyjmie, że elementy są już unikalne ORAZ funkcja pominie określanie unikalnych elementów.
Daje to unikatowe wartości w array1które nie są w array2. assume_uniquejest Falsedomyślnie.
Jeśli obawiasz się unikalnych elementów (na podstawie odpowiedzi Chinny84 ), po prostu użyj (gdzie assume_unique=False=> wartość domyślna):
import numpy as np
list_1 = ["a", "b", "c", "d", "e"]
list_2 = ["a", "f", "c", "m"]
main_list = np.setdiff1d(list_2,list_1)
# yields the elements in `list_2` that are NOT in `list_1`
(2)
Dla tych, którzy chcą posortować odpowiedzi, stworzyłem niestandardową funkcję:
import numpy as np
def setdiff_sorted(array1,array2,assume_unique=False):
ans = np.setdiff1d(array1,array2,assume_unique).tolist()
if assume_unique:
return sorted(ans)
return ans
Aby uzyskać odpowiedź, uruchom:
main_list = setdiff_sorted(list_2,list_1)
UWAGI BOCZNE:
(a) Rozwiązanie 2 (funkcja niestandardowa setdiff_sorted) zwraca listę (w porównaniu z tablicą w rozwiązaniu 1).
(b) Jeśli nie jesteś pewien, czy elementy są unikalne, po prostu użyj domyślnego ustawienia NumPy setdiff1dw obu rozwiązaniach A i B. Co może być przykładem komplikacji? Patrz uwaga (c).
(c) Sytuacja będzie wyglądać inaczej, jeśli żadna z tych dwóch list nie jest unikalna.
Powiedzmy list_2nie jest unikalna: list2 = ["a", "f", "c", "m", "m"]. Keep list1as is: list_1 = ["a", "b", "c", "d", "e"]
Ustawienie domyślnej wartości assume_uniqueuzysku ["f", "m"](w obu rozwiązaniach). JEDNAK, jeśli ustawisz assume_unique=True, oba rozwiązania dają ["f", "m", "m"]. Czemu? Dzieje się tak, ponieważ użytkownik ZAKŁADAŁ, że elementy są unikalne). Dlatego LEPIEJ ZACHOWAĆassume_uniquedo wartości domyślnej. Zwróć uwagę, że obie odpowiedzi są posortowane.
pytontępy
list_2które nigdzie nie występują w,list_1lub elementówlist_2, które nie występują w tym samym indeksie wlist_1?