Welche Datenstruktur ist in Python effizienter / schneller? Angenommen, diese Reihenfolge ist für mich nicht wichtig und ich würde sowieso nach Duplikaten suchen. Ist ein Python-Set langsamer als eine Python-Liste?
python
list
performance
data-structures
set
Mantas Vidutis
quelle
quelle
Listen sind etwas schneller als Sätze, wenn Sie nur die Werte durchlaufen möchten.
Sets sind jedoch erheblich schneller als Listen, wenn Sie überprüfen möchten, ob ein Element darin enthalten ist. Sie können jedoch nur eindeutige Elemente enthalten.
Es stellt sich heraus, dass Tupel bis auf ihre Unveränderlichkeit fast genauso funktionieren wie Listen.
Iterieren
Stellen Sie fest, ob ein Objekt vorhanden ist
quelle
Listenleistung:
Leistung einstellen:
Möglicherweise möchten Sie Tupel in Betracht ziehen, da sie Listen ähneln, aber nicht geändert werden können. Sie belegen etwas weniger Speicher und sind schneller zugänglich. Sie sind nicht so flexibel, aber effizienter als Listen. Ihre normale Verwendung besteht darin, als Wörterbuchschlüssel zu dienen.
Mengen sind ebenfalls Sequenzstrukturen, jedoch mit zwei Unterschieden zu Listen und Tupeln. Obwohl Sets eine Reihenfolge haben, ist diese Reihenfolge willkürlich und nicht unter der Kontrolle des Programmierers. Der zweite Unterschied besteht darin, dass die Elemente in einer Menge eindeutig sein müssen.
set
per Definition. [ Python | Wiki ].quelle
set
integrierten Typlink ( docs.python.org/2/library/stdtypes.html#set ) aktualisieren, nicht auf die veraltetesets
Bibliothek. Zweitens, "Mengen sind auch Sequenzstrukturen", lesen Sie Folgendes aus dem eingebauten Typ-Link: "Als ungeordnete Sammlung zeichnen Mengen weder die Elementposition noch die Einfügereihenfolge auf. Dementsprechend unterstützen Mengen keine Indizierung, Aufteilung oder andere sequenzartiges Verhalten. "range
ist nichtlist
.range
ist eine spezielle Klasse mit benutzerdefinierter__contains__
magischer Methode.xrange
)Set
Gewinne aufgrund nahezu sofortiger "enthält" Überprüfungen: https://en.wikipedia.org/wiki/Hash_tableListenimplementierung : Normalerweise ein Array, niedrige Ebene in der Nähe des Metalls, gut für die Iteration und den wahlfreien Zugriff nach Elementindex.
Festlegen der Implementierung: https://en.wikipedia.org/wiki/Hash_table . Sie iteriert nicht in einer Liste, sondern findet das Element durch Berechnen eines Hashs aus dem Schlüssel. Dies hängt also von der Art der Schlüsselelemente und dem Hash ab Funktion. Ähnlich wie beim Diktieren. Ich vermute, es
list
könnte schneller sein, wenn Sie nur sehr wenige Elemente haben (<5). Je größer die Anzahl der Elemente ist, desto besser ist dieset
Leistung für eine Prüfung der enthaltenen Daten. Es ist auch schnell zum Hinzufügen und Entfernen von Elementen. Denken Sie auch immer daran, dass der Bau eines Sets Kosten verursacht!HINWEIS : Wenn das
list
bereits sortiert ist, kann die Suchelist
sehr schnell sein, aber in den üblichen Fällenset
ist a schneller und einfacher , wenn es Überprüfungen enthält.quelle
tl; dr
Datenstrukturen (DS) sind wichtig, da sie verwendet werden, um Operationen an Daten auszuführen, die im Wesentlichen Folgendes beinhalten: Nehmen Sie eine Eingabe , verarbeiten Sie sie und geben Sie die Ausgabe zurück .
Einige Datenstrukturen sind in bestimmten Fällen nützlicher als andere. Daher ist es ziemlich unfair zu fragen, welches (DS) effizienter / schneller ist. Es ist wie zu fragen, welches Werkzeug zwischen Messer und Gabel effizienter ist. Ich meine, alles hängt von der Situation ab.
Listen
Eine Liste ist eine veränderbare Sequenz , die normalerweise zum Speichern von Sammlungen homogener Elemente verwendet wird .
Sets
Ein festgelegtes Objekt ist eine ungeordnete Sammlung verschiedener hashbarer Objekte . Es wird häufig verwendet, um die Mitgliedschaft zu testen, Duplikate aus einer Sequenz zu entfernen und mathematische Operationen wie Schnittmenge, Vereinigung, Differenz und symmetrische Differenz zu berechnen.
Verwendung
Aus einigen Antworten geht hervor, dass eine Liste beim Durchlaufen der Werte viel schneller als eine Menge ist. Andererseits ist ein Satz schneller als eine Liste, wenn geprüft wird, ob ein Element darin enthalten ist. Daher können Sie nur sagen, dass eine Liste für bestimmte Operationen besser ist als ein Satz und umgekehrt.
quelle
Ich war an den Ergebnissen interessiert, als ich mit CPython überprüfte, ob ein Wert einer von wenigen Literalen ist.
set
gewinnt in Python 3 vstuple
,list
undor
:Ausgabe:
Für 3 bis 5 Literale
set
gewinnt immer noch mit großem Abstand undor
wird am langsamsten.In Python 2
set
ist immer die langsamste.or
ist die schnellste für 2 bis 3 Literaletuple
undlist
ist mit 4 oder mehr Literalen schneller. Ich konnte die Geschwindigkeit vontuple
vs nicht unterscheidenlist
.Wenn die zu testenden Werte in einer globalen Variablen außerhalb der Funktion zwischengespeichert wurden, anstatt das Literal innerhalb der Schleife zu erstellen, wurde
set
jedes Mal gewonnen, selbst in Python 2.Diese Ergebnisse gelten für 64-Bit-CPython auf einem Core i7.
quelle
Ich würde eine Set-Implementierung empfehlen, bei der der Anwendungsfall auf das Referenzieren oder Suchen nach Existenz beschränkt ist, und eine Tupel-Implementierung, bei der der Anwendungsfall erfordert, dass Sie eine Iteration durchführen. Eine Liste ist eine Implementierung auf niedriger Ebene und erfordert einen erheblichen Speicheraufwand.
quelle
Ausgabe nach Vergleich von 10 Iterationen für alle 3: Vergleich
quelle
Sätze sind schneller, außerdem erhalten Sie mehr Funktionen mit Sätzen, z. B. zwei Sätze:
Wir können leicht zwei Sätze verbinden:
Finden Sie heraus, was in beiden gemeinsam ist:
Finden Sie heraus, was in beiden Bereichen anders ist:
Und vieles mehr! Probieren Sie sie einfach aus, sie machen Spaß! Wenn Sie an den verschiedenen Werten in 2 Listen oder an gemeinsamen Werten in 2 Listen arbeiten müssen, ziehe ich es außerdem vor, Ihre Listen in Mengen umzuwandeln, und viele Programmierer tun dies auf diese Weise. Hoffe es hilft dir :-)
quelle