2014-04-04 11 views

Odpowiedz

9

Ponieważ dane wejściowe są posortowane, najlepiej jest algorytmicznie zastosować moduł bisect - np. bisect_left

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

elementy, które mają znajdować się w indeksach bisect_left(list_, item) i
bisect_left(list_, item) - 1

To powinno dać rezultat w O(logN) wyszukiwań - Nie ma się o wiele lepiej niż z punktu widzenia algorytmu.

3

Można użyć bisect module's bisect funkcję, aby uzyskać indeks, w którym item pasuje w

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

Pamiętaj Twój list_ musi być sortowane, aby móc korzystać z funkcji w module bisect.

1

użyłbym numpy:

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

i= argmin(abs(x-item)) 
print(i) 
Powiązane problemy