def binary_search(i, vals): """Finds index of item i in list vals, assuming vals is in increasing order. Returns index of item if found, -1 if not found.""" hi = len(vals)-1 if(hi < 0): #empty list return -1 if(i == vals[0]): #list with one item return 0 #or coincidentally first item lo = 0 mid = (hi+lo)//2 hi = hi+1 #keeps while loop from terminating before last index while(hi != mid and mid != lo): if(i == vals[mid]): #found it return mid elif(i < vals[mid]): #i in lower half hi = mid mid = (hi+lo)//2 else: #i in upper half lo = mid mid = round((hi+lo)/2+.1) #Python sometimes rounds .5 down #add .1 so it always rounds up #otherwise end of list may not be reached return -1