In Python, die Struktur der Daten ist effizienter/speedy? Unter der Annahme, dass die Reihenfolge ist nicht wichtig für mich und ich wäre der Dublettenprüfung sowieso, das ist ein Python set langsamer als Python-Liste?
InformationsquelleAutor Mantas Vidutis | 2010-05-14
Es hängt davon ab, was Sie beabsichtigen zu tun.
Sets sind deutlich schneller, wenn es darum geht zu bestimmen, ob ein Objekt vorhanden ist (wie in
x in s
), sind aber langsamer als die Listen, wenn es um die Iteration über deren Inhalte.Können Sie die timeit-Modul, um zu sehen, welches schneller ist und für Ihre situation.
hash-Tabellen stackoverflow.com/a/3949350/125507
en.wikipedia.org/wiki/Hash_table
Set ist nicht deutlich langsamer als die Liste während der Iteration.
Sets und Listen haben beide die lineare Zeit-iteration. Zu sagen, dass ein "langsamer" als der andere ist falsch und verwechselt hat neue Programmierer, die dies Lesen, beantworten.
InformationsquelleAutor Michael Aaron Safyan
Listen sind etwas schneller als die sets, wenn Sie nur wollen, um die Werte Durchlaufen.
Sets, allerdings sind deutlich schneller als die Listen, wenn Sie wollen, um zu überprüfen, ob ein Element darin enthalten ist. Sie können nur enthalten einzigartige Gegenstände, obwohl.
Es stellt sich heraus Tupeln durchführen, in fast genau der gleichen Weise wie Listen, außer für Ihre Unveränderlichkeit.
Durchlaufen
Bestimmen, ob ein Objekt vorhanden ist
Ich habe aktualisiert, der code zum entfernen der Objekt-Erstellung jetzt. Die setup-phase der timeit loops, wird nur einmal aufgerufen (docs.python.org/2/library/timeit.html#timeit.Timer.timeit).
InformationsquelleAutor Ellis Percival
Liste-Leistung:
Set-Leistung:
Möchten Sie vielleicht erwägen den - Tupel als Sie sind ähnlich wie Listen, aber nicht geändert werden können. Sie nehmen ein bisschen weniger Speicher und sind schneller zugänglich. Sie sind nicht so flexibel, aber sind effizienter als Listen. Normale Benutzung ist, um zu dienen als dictionary-Schlüssel.
Sets sind auch Sequenz-Strukturen, aber mit zwei unterschieden von Listen und Tupeln. Obwohl die Sätze haben eine Ordnung, die Reihenfolge ist willkürlich und nicht unter der programmer ' s Kontrolle. Der zweite Unterschied ist, dass die Elemente einer Menge eindeutig sein muss.
set
per definition. [python | wiki].set
built-in Typ link (docs.python.org/2/library/stdtypes.html#set) nicht die veraltetensets
Bibliothek. Zweite, "Sets sind auch Sequenz-Strukturen", Lesen Sie die folgenden aus der built-in-Typ link: "eine ungeordnete Sammlung, sets nicht aufnehmen-element-position oder der Reihenfolge der Einfügung. Dementsprechend setzt nicht unterstützt Indizierung, slicing, oder andere Sequenz-wie Verhalten."range
ist nichtlist
.range
ist eine spezielle Klasse, die mit benutzerdefinierten__contains__
magic-Methode.das ist wahr, aber nur für Python ist3. In Python2-Bereich gibt eine normale Liste (das ist, warum existiert solch schlimme Dinge
xrange
)InformationsquelleAutor user2601995
Set
gewinnt aufgrund der Nähe sofortige 'enthält' überprüft: https://en.wikipedia.org/wiki/Hash_tableListe Umsetzung: in der Regel ein array, low-Pegel schließen Sie an das Metall, gut für die Wiederholung und random-access-element index.
Set Umsetzung: https://en.wikipedia.org/wiki/Hash_table, es nicht die Iteration über eine Liste, findet aber das element durch die Berechnung einer hash dem Schlüssel, so hängt es von der Art der Schlüsselelemente und der hash-Funktion. Ähnlich dem, was verwendet für dict. Ich vermute
list
schneller sein könnte, wenn Sie nur sehr wenige Elemente (< 5), das größere element Anzahl, desto besser dieset
führen zum einen enthält überprüfen. Es ist auch schnell element hinzufügen und entfernen.HINWEIS: Wenn die
list
ist bereits sortiert, die Suche derlist
könnte ziemlich schnell, aber für die üblichen Fälle einset
ist einfacher und schneller für Prüfungen enthält.python läuft noch auf einem Rechner und einige Implementierungen wie Liste als 'array' sind näher an, was die hardware ist gut: stackoverflow.com/questions/176011/..., aber es hängt immer davon ab, was Sie erreichen wollen, ist es gut zu wissen, ein wenig über die Implementierungen, nicht nur Abstraktionen.
InformationsquelleAutor Christophe Roussy
Ich würde empfehlen, eine Set-Implementierung, wo die Grenze zu referenzieren oder die Suche nach Existenz und Tuple-Implementierung, wo der Anwendungsfall erfordert, dass Sie durchführen iteration. Eine Liste ist eine low-level-Implementierung und erfordert erhebliche Speicher-overhead.
InformationsquelleAutor Aditya Kumar Roy