2014-04-04 25 views

cevap

9

Girdi sıralandığı için, en iyi algoritma, bisect modülünü kullanmaktır - örn. bisect_left

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

Eğer endeksleri bisect_left(list_, item) ve
bisect_left(list_, item) - 1

Bu O(logN) aramalarda herhangi bir netice vermelidir ikamet istediğiniz öğeleri - O bir algoritma açısından çok daha iyisi olamaz.

3

Sen hatırla

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

yılında item uyan hangi endeksini hesaplamak için bisect module's bisect işlevini kullanabilirsiniz Sizin list_bisect modülde fonksiyonlarını kullanabilmek için için, sıralanabilir zorundadır.

1

Ben numpy kullanırsınız:

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

i= argmin(abs(x-item)) 
print(i) 
İlgili konular