Existe-t-il une fonction de bibliothèque qui effectue une recherche binaire sur une liste / un tuple et renvoie la position de l'élément s'il est trouvé et «False» (-1, Aucun, etc.) sinon?
J'ai trouvé les fonctions bisect_left / right dans le module bisect , mais elles renvoient toujours une position même si l'élément n'est pas dans la liste. C'est parfaitement bien pour leur utilisation prévue, mais je veux juste savoir si un élément est dans la liste ou non (je ne veux rien insérer).
J'ai pensé à utiliser bisect_left
puis à vérifier si l'élément à cette position est égal à ce que je recherche, mais cela semble fastidieux (et j'ai également besoin de vérifier si le nombre peut être supérieur au plus grand nombre de ma liste). S'il y a une meilleure méthode, j'aimerais en savoir plus.
Edit Pour clarifier ce pour quoi j'ai besoin de ceci: je suis conscient qu'un dictionnaire serait très bien adapté pour cela, mais j'essaie de garder la consommation de mémoire aussi faible que possible. Mon utilisation prévue serait une sorte de table de recherche à double sens. J'ai dans le tableau une liste de valeurs et je dois pouvoir accéder aux valeurs en fonction de leur index. Et aussi je veux être en mesure de trouver l'index d'une valeur particulière ou None si la valeur n'est pas dans la liste.
Utiliser un dictionnaire pour cela serait le moyen le plus rapide, mais doublerait (approximativement) les besoins en mémoire.
Je posais cette question en pensant que j'avais peut-être oublié quelque chose dans les bibliothèques Python. Il semble que je devrais écrire mon propre code, comme Moe l'a suggéré.
np.searchsorted
c'est utile. docs.scipy.org/doc/numpy/reference/generated/…