On Mar 29, 2007, at 6:51 AM, Su Y wrote: > > I want find the first number in extend[] which is larger than num, so > I wrote: > def find(num): > count=0 > for elem in extend: > if elem<num: > count+=1 > return count > > I found that if extend[] is monotonous, like [1.1, 2.3, 3.2, 4.5, > 5.6], > it works fine: find(4) returns 3, extend[3] is 4.5. > But, if extend[] is not monotonous, like [1.1, 2.3, 3.2, 4.5, 5.6, > 4.6, 3.4, 2.1, 0.3], > find(4) returns 6, extend[6] is 3.4! > > what's going on here? I really can't understand....
find() loops through the list, and every time it finds a value less than num it increments count. So in your second example the values 1.1, 2.3, 3.2, 3.4, 2.1, and 0.3 are all less than 4, which means count will be 6. As you learned, a sorted list behaves as you expect. So one approach is to sort your list first. But another perhaps better approach is to do something like: def find(num): # check to make sure there *is* a value greater than num if max(extend) > num: # then return the smallest value that is greater than num return min([x for x in extend if x > num]) else: return None Hope this helps, Michael -- http://mail.python.org/mailman/listinfo/python-list