2010-07-07 21 views
16

Gibt es Python-Einbauten oder weit verbreitete Python-Bibliotheken, um eine Suche in einer sortierten Reihenfolge durchzuführen?Eine sortierte Liste suchen?

+1

Sequenz von was? Auch welche Art von Suche (Binär, etc.)? –

+0

Ich glaube, die Frage versucht "kanonisch" oder "generisch" zu sein und so kann die Bedeutung von "sequenz" die [Python-Dokumentationsdefinition einer 'Sequenz' sein (dh python 2.x" Es gibt sieben Sequenztypen: Strings, Unicode-Strings, Listen, Tupel, Bytearrays, Puffer und Xrange-Objekte. ")] (https://docs.python.org/2/library/stdtypes.html#sequence-types-str-unicode-list-tuple -bytearray-buffer-xrange) –

Antwort

22

bisect ist Teil der Standardbibliothek - ist das, wonach Sie suchen?

+0

, die nicht erläutert, wie nach dem Wert in der Liste gesucht wird. –

13

Es ist erwähnenswert, dass es einige hochwertige Python-Bibliotheken zur Verwaltung einer sortierten Liste gibt, die auch eine schnelle Suche implementieren: sortedcontainers und blist. Die Verwendung dieser hängt natürlich davon ab, wie oft Sie Elemente aus der Liste einfügen/entfernen und suchen müssen. Jedes dieser Module stellt eine Klasse zur Verfügung, die die Elemente effizient in der Sortierreihenfolge verwaltet.

Aus der Dokumentation für SortedList:

L.bisect_left(value) 
    Similar to the bisect module in the standard library, this returns 
    an appropriate index to insert value in L. If value is already present 
    in L, the insertion point will be before (to the left of) any existing 
    entries. 

L.bisect(value) 
    Same as bisect_left. 

L.bisect_right(value) 
    Same as bisect_left, but if value is already present in L, the 
    insertion point will be after (to the right of) any existing entries. 

Beide Implementierungen verwenden binäre Suche den richtigen Index des gegebenen Wert zu finden. Es gibt eine Seite für die Wahl zwischen den beiden Modulen.

Haftungsausschluss: Ich bin der Autor des Sortedcontainers-Moduls.

Verwandte Themen