TL; DR:
LÖSUNG (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`
LÖSUNG (2) Sie möchten eine sortierte Liste
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)
ERKLÄRUNGEN:
(1) Sie können NumPy die verwenden setdiff1d
( array1
, array2
, assume_unique
= False
).
assume_unique
fragt den Benutzer, WENN die Arrays BEREITS EINZIGARTIG SIND.
Wenn False
ja, werden zuerst die eindeutigen Elemente bestimmt.
Wenn dies True
der Fall ist , geht die Funktion davon aus, dass die Elemente bereits eindeutig sind. Die UND-Funktion überspringt die Bestimmung der eindeutigen Elemente.
Dies ergibt die eindeutigen Werte array1
, die nicht in sind array2
. assume_unique
ist False
standardmäßig.
Wenn Sie sich mit den eindeutigen Elementen befassen (basierend auf der Antwort von Chinny84 ), verwenden Sie einfach (wobei assume_unique=False
=> der Standardwert):
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)
Für diejenigen, die Antworten sortieren möchten, habe ich eine benutzerdefinierte Funktion erstellt:
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
Um die Antwort zu erhalten, führen Sie Folgendes aus:
main_list = setdiff_sorted(list_2,list_1)
SEITLICHE HINWEISE:
(a) Lösung 2 (benutzerdefinierte Funktion setdiff_sorted
) gibt eine Liste zurück (im Vergleich zu einem Array in Lösung 1).
(b) Wenn Sie nicht sicher sind, ob die Elemente eindeutig sind, verwenden Sie einfach die Standardeinstellung von NumPy's setdiff1d
in beiden Lösungen A und B. Was kann ein Beispiel für eine Komplikation sein? Siehe Anmerkung (c).
(c) Die Dinge werden anders sein, wenn eine der beiden Listen nicht eindeutig ist.
Sprich list_2
ist nicht eindeutig : list2 = ["a", "f", "c", "m", "m"]
. Behalten Sie list1
es bei: list_1 = ["a", "b", "c", "d", "e"]
Festlegen des Standardwerts für die assume_unique
Ausbeuten ["f", "m"]
(in beiden Lösungen). Wenn Sie jedoch einstellen assume_unique=True
, geben beide Lösungen ["f", "m", "m"]
. Warum? Dies liegt daran, dass der Benutzer davon ausgegangen ist, dass die Elemente eindeutig sind. Daher ist es besser zu haltenassume_unique
auf den Standardwert. Beachten Sie, dass beide Antworten sortiert sind.
Pythonnumpy
list_2
, die nirgendwo in erscheinen,list_1
oder nach Elementenlist_2
, die nicht im selben Index vorhanden sindlist_1
?