HOWTO · Python

Wie man in Python eine Listensubtraktion durchführt

Es wird gezeigt, wie die Listensubtraktion in Python durchgeführt wird.

Auf dieser Seite

Dieses Tutorial demonstriert, wie man die Listensubtraktion, oder anders ausgedrückt, die Listenminus-Liste in Python durchführt.

Wie von der Mengenlehre in der Mathematik definiert, bezieht sich die Differenz zweier Mengen auf die Elemente aus der einen Menge, die in der anderen Menge nicht vorhanden sind.

Wenn wir zum Beispiel diese beiden Listen deklarieren

list1 = [1, 2, 4]
list2 = [2, 3]

Die Differenz von list1 - list2 wäre [1, 4], während list2 - list1 [3] wäre.

Liste in set umwandeln, um eine Listensubtraktion in Python durchzuführen

Mengenlehreoperationen werden in Python unterstützt. Diese Operationen werden jedoch nur vom Datentyp set unterstützt. Daher müssen Listen in set konvertiert werden, um die Operation set zu verwenden. Dies ist möglich, indem man eine Liste um die Funktion set() umschließt.

Anmerkung: Die Konvertierung einer Liste in eine Menge entfernt jede Art von Ordnung und entfernt doppelte Werte aus der Liste.

listA = [1, 2, 4, 7, 9, 11, 11, 14, 14]
listB = [2, 3, 7, 8, 11, 13, 13, 16]
setA = set(listA)
setB = set(listB)

print("A - B = ", setA - setB)

Ausgabe:

A - B =  {1, 4, 9, 14}

Das Ergebnis gibt die Differenz zwischen den beiden Mengen aus und entfernt die doppelten Werte.

Wir können die Funktion list() benutzen, um das Ergebnis von einer set in eine Liste zu konvertieren.

listA = [1, 2, 4, 7, 9, 11, 11, 14, 14]
listB = [2, 3, 7, 8, 11, 13, 13, 16]
setA = set(listA)
setB = set(listB)

list_diff = list(setA - setB)

print("A - B: ", list_diff)

Ausgabe:

A - B:  [1, 4, 9, 14]

List Comprehensions verwenden, um Listenunterschiede in Python zu erhalten

Mit Hilfe des List Comprehensions kann geprüft werden, ob ein Element nur in der ersten Liste, nicht aber in der zweiten Liste vorhanden ist. Mit dieser Lösung ist es möglich, die Differenzoperation durchzuführen, ohne die Liste in eine Menge umzuwandeln.

listA = [1, 2, 4, 7, 9, 11, 11, 14, 14]
listB = [2, 3, 7, 8, 11, 13, 13, 16]

listSub = [elem for elem in listA if elem not in listB]

print("A - B =", listSub)

Ausgabe:

A - B = [1, 4, 9, 14, 14]

Diese Lösung bringt die Reihenfolge der Liste nicht durcheinander und entfernt Duplikate.

Allerdings wird der Wert 11 zweimal in listA wiederholt, und beide Iterationen von 11 werden aus dem Ergebnis von A - B entfernt, da 11 in beiden Mengen existiert. Dieses Verhalten ist wie erwartet.