TL; DR:
SOLUZIONE (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`
SOLUZIONE (2) Si desidera un elenco ordinato
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)
SPIEGAZIONI:
(1) È possibile utilizzare NumPy di setdiff1d( array1, array2, assume_unique= False).
assume_uniquechiede all'utente SE gli array SONO GIÀ UNICI.
Se False, quindi gli elementi univoci vengono determinati per primi.
Se True, la funzione presumerà che gli elementi siano già univoci E la funzione salterà la determinazione degli elementi univoci.
Ciò restituisce i valori univoci array1che non sono presenti array2. assume_uniqueè l' Falseimpostazione predefinita.
Se sei interessato agli elementi unici (in base alla risposta di Chinny84 ), usa semplicemente (dove assume_unique=False=> il valore predefinito):
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)
Per coloro che desiderano ordinare le risposte, ho creato una funzione personalizzata:
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
Per ottenere la risposta, esegui:
main_list = setdiff_sorted(list_2,list_1)
NOTE A LATO:
(a) La soluzione 2 (funzione personalizzata setdiff_sorted) restituisce un elenco (rispetto a un array nella soluzione 1).
(b) Se non sei sicuro che gli elementi siano univoci, usa semplicemente l'impostazione predefinita di NumPy setdiff1din entrambe le soluzioni A e B. Quale può essere un esempio di complicazione? Vedi nota (c).
(c) Le cose saranno diverse se uno dei due elenchi non è unico.
Dire list_2non è unico nel suo genere: list2 = ["a", "f", "c", "m", "m"]. Keep list1as is: list_1 = ["a", "b", "c", "d", "e"]
impostazione del valore di default delle assume_uniquerese ["f", "m"](in entrambe le soluzioni). TUTTAVIA, se si imposta assume_unique=True, entrambe le soluzioni danno ["f", "m", "m"]. Perché? Questo perché l'utente HA ASSUNTO che gli elementi siano unici). Quindi, È MEGLIO MANTENEREassume_uniqueal valore predefinito. Nota che entrambe le risposte sono ordinate.
pitonenumpy
list_2che non compaiono da nessuna parte inlist_1o elementi inlist_2che non sono presenti nello stesso indice inlist_1?