7 Stimmen

Python: Was ist der Unterschied zwischen set.difference und set.difference_update?

s.difference(t) gibt eine neue Menge zurück, die keine Elemente in t enthält.

s.difference_update(t) gibt eine aktualisierte Menge zurück, die keine Elemente in t enthält.

Was ist der Unterschied zwischen diesen beiden Mengenmethoden? Da difference_update die Menge s aktualisiert, welche Vorsichtsmaßnahmen sollten getroffen werden, um zu vermeiden, dass man von dieser Methode ein Ergebnis von None erhält?

In Bezug auf Geschwindigkeit sollte set.difference_update nicht schneller sein, da Sie nur Elemente aus der Menge s entfernen, anstatt wie bei set.difference() eine neue Menge zu erstellen?

13voto

Raymond Hettinger Punkte 197261

F. What's the difference between these two set methods?

A. Die Aktualisierungs-Version subtrahiert von einem vorhandenen Set, ändert es und lässt es möglicherweise kleiner als das Ursprüngliche. Die Nicht-Aktualisierungs-Version erzeugt ein neues Set, ohne die Originale zu verändern.

F. Weil difference_update das Set s aktualisiert, welche Vorsichtsmaßnahmen sollten getroffen werden, um ein Ergebnis von None von dieser Methode zu vermeiden?

A. Änderungsmethoden in Python geben im Allgemeinen None zurück, um anzuzeigen, dass sie ein Objekt geändert haben. Die einzige "Vorsichtsmaßnahme" besteht darin, das None-Ergebnis nicht einer Variablen zuzuweisen.

F. In Bezug auf Geschwindigkeit sollte set.difference_update nicht schneller sein, da nur Elemente aus dem Set s entfernt werden und nicht ein neues Set wie bei set.difference() erstellt wird, oder?

A. Ja, der Algorithmus der Aktualisierungs-Version verwirft einfach Werte.

Im Gegensatz dazu hängt der Algorithmus für die nicht-aktualisierende Version von der Größe der Sets ab.

Wenn die Größe von s vier oder mehr Mal größer ist als die von t, kopiert die neue Set-Version zuerst das Hauptset und verwirft dann Werte daraus. Daher wird "s - t als n = s.copy(); n.difference_update(t)) umgesetzt. Dieser Algorithmus wird verwendet, wenn s viel größer als t ist.

Andernfalls besteht der Algorithmus für die nicht-aktualisierende Version darin, ein leeres neues Set n zu erstellen, über die Elemente von s zu iterieren und sie zu n hinzuzufügen, wenn sie nicht in t vorhanden sind.

12voto

ivan_pozdeev Punkte 30938

difference_update aktualisiert das Set direkt an Ort und Stelle, anstatt ein neues zu erstellen.

>>> s={1,2,3,4,5}
>>> t={3,5}
>>> s.difference(t)
{1, 2, 4}
>>> s
{1, 2, 3, 4, 5}
>>> s.difference_update(t)
>>> s
{1, 2, 4}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X