Esiste una funzione di libreria che esegue la ricerca binaria su un elenco / tupla e restituisce la posizione dell'elemento se trovato e 'Falso' (-1, Nessuno, ecc.) Se no?
Ho trovato le funzioni bisect_left / right nel modulo bisect , ma restituiscono comunque una posizione anche se l'elemento non è nell'elenco. Va benissimo per l'uso previsto, ma voglio solo sapere se un elemento è nell'elenco o no (non voglio inserire nulla).
Ho pensato di usare bisect_left
e quindi verificare se l'elemento in quella posizione è uguale a quello che sto cercando, ma sembra ingombrante (e devo anche fare dei limiti controllando se il numero può essere maggiore del numero più grande nella mia lista). Se esiste un metodo migliore, mi piacerebbe saperlo.
Modifica Per chiarire di cosa ho bisogno: sono consapevole che un dizionario sarebbe molto adatto per questo, ma sto cercando di mantenere il consumo di memoria il più basso possibile. Il mio uso previsto sarebbe una sorta di tabella di ricerca a doppio senso. Nella tabella ho un elenco di valori e devo poter accedere ai valori in base al loro indice. E voglio anche essere in grado di trovare l'indice di un determinato valore o Nessuno se il valore non è nell'elenco.
L'uso di un dizionario per questo sarebbe il modo più veloce, ma raddoppierebbe (approssimativamente) i requisiti di memoria.
Stavo ponendo questa domanda pensando che avrei potuto trascurare qualcosa nelle librerie di Python. Sembra che dovrò scrivere il mio codice, come suggerì Moe.
np.searchsorted
è utile. docs.scipy.org/doc/numpy/reference/generated/…