Ich lese that question über wie bisect
auf einer Liste von Tupeln zu verwenden, und ich verwendete diese Informationen zu beantworten that question. Es funktioniert, aber ich hätte gerne eine allgemeinere Lösung.mit Halbierung auf Liste der Tupel aber Vergleich nur mit ersten Wert
Da bisect
erlaubt keine key
Funktion angeben, wenn ich diese:
import bisect
test_array = [(1,2),(3,4),(5,6),(5,7000),(7,8),(9,10)]
und ich möchte das erste Element zu finden, wo x > 5
für jene (x,y)
Tupel (nicht y
überhaupt bedenkt, ich sind zur Zeit dies zu tun:
bisect.bisect_left(test_array,(5,10000))
und ich das richtige Ergebnis zu bekommen, weil ich wissen , dass keine y
ist größer als 10000, also bisect
verweist mich auf den Index (7,8)
. Hätte ich stattdessen 1000
gesetzt, wäre es falsch gewesen.
für ganze Zahlen, kann ich
bisect.bisect_left(test_array,(5+1,))
aber im allgemeinen Fall tun, wenn es schwimmt sein kann, wie ohne zu wissen, die Maximalwert des zweiten Elements zu, dass?
test_array = [(1,2),(3,4),(5.2,6),(5.2,7000),(5.3,8),(9,10)]
Ich habe dies versucht:
bisect.bisect_left(test_array,(min_value+sys.float_info.epsilon,))
und es nicht funktioniert hat, aber ich habe versucht, dies:
bisect.bisect_left(test_array,(min_value+sys.float_info.epsilon*3,))
und es funktionierte. Aber es fühlt sich an wie ein schlechter Hack. Irgendwelche sauberen Lösungen?
Es gibt dieses 'SortedCollection' [code Rezept] (https://code.activestate.com/recipes/577197-sortedcollection/), das ist empfohlen in [bisect docs] (https://docs.python.org/2/library/bisect.html) für die Verwendung von bisect mit einer Schlüsselfunktion n. – schwobaseggl
ja; Ich könnte den Bisect-Code kopieren und die Vergleichsfunktion in Ordnung ändern (nicht sehr praktisch, wenn man eine bissige Antwort erstellen möchte) –
@schwobaseggl nice find. Ich weiß nicht, wie du das zu einer Antwort machen kannst, ohne abhängig zu sein. Ich würde upvote & akzeptieren, wenn Sie einen Weg gefunden haben. Wann werden sie solch großartige Rezepte in Bibliotheken oder in der Sprache selbst integrieren? –