Gibt es eine Bibliotheksfunktion, die eine binäre Suche in einer Liste / einem Tupel durchführt und die Position des Elements zurückgibt, wenn es gefunden wird, und 'False' (-1, None, etc.), wenn nicht?
Ich habe die Funktionen bisect_left / right im bisect-Modul gefunden , aber sie geben immer noch eine Position zurück, auch wenn das Element nicht in der Liste enthalten ist. Das ist für den beabsichtigten Gebrauch vollkommen in Ordnung, aber ich möchte nur wissen, ob ein Element in der Liste enthalten ist oder nicht (ich möchte nichts einfügen).
Ich habe darüber nachgedacht, zu verwenden bisect_left
und dann zu überprüfen, ob das Element an dieser Position dem entspricht, was ich suche, aber das scheint umständlich zu sein (und ich muss auch Grenzen prüfen, ob die Anzahl größer sein kann als die größte Zahl in meiner Liste). Wenn es eine schönere Methode gibt, würde ich gerne davon erfahren.
Bearbeiten Um zu verdeutlichen, wofür ich dies benötige: Ich bin mir bewusst, dass ein Wörterbuch dafür sehr gut geeignet wäre, aber ich versuche, den Speicherverbrauch so gering wie möglich zu halten. Meine beabsichtigte Verwendung wäre eine Art Doppel-Nachschlagetabelle. Ich habe in der Tabelle eine Liste von Werten und muss in der Lage sein, auf die Werte basierend auf ihrem Index zuzugreifen. Außerdem möchte ich in der Lage sein, den Index eines bestimmten Werts oder None zu finden, wenn der Wert nicht in der Liste enthalten ist.
Die Verwendung eines Wörterbuchs hierfür wäre der schnellste Weg, würde jedoch den Speicherbedarf (ungefähr) verdoppeln.
Ich habe diese Frage gestellt, weil ich dachte, ich hätte etwas in den Python-Bibliotheken übersehen. Es scheint, dass ich meinen eigenen Code schreiben muss, wie Moe vorgeschlagen hat.
np.searchsorted
ist dies nützlich. docs.scipy.org/doc/numpy/reference/generated/…