2014-04-04 12 views

risposta

9

Dato che l'input è ordinato, la scelta migliore è quella di utilizzare il modulo bisect, ad es. bisect_left

>>> list_ = [0, 3.5, 5.8, 6.2, 88] 
>>> item = 4.4 
>>> bisect.bisect_left(list_, item) 
2 

Gli elementi che si desidera risiedere indici bisect_left(list_, item) e
bisect_left(list_, item) - 1

Questo dovrebbe dare un risultato in O(logN) ricerche - Non c'è molto di meglio dal punto di vista algoritmo.

3

È possibile utilizzare bisect module's bisect funzione per ottenere l'indice in cui il item si inserisce in

list_, item = [0, 3.5, 5.8, 6.2, 88], 4.4 
from bisect import bisect 
print bisect(list_, item) 
# 2 

Ricordate vostro list_ deve essere ordinato, per essere in grado di utilizzare le funzioni nel modulo bisect.

1

userei NumPy:

from numpy import * 
x = array([0, 3.5, 5.8, 6.2, 88]) 
item = 4.4 

i= argmin(abs(x-item)) 
print(i) 
Problemi correlati