On Mar 16, 12:59 pm, [EMAIL PROTECTED] wrote:
> I have an ordered list e.g. x = [0, 100, 200, 1000], and given any
> positive integer y, I want to determine its appropriate position in
> the list (i.e the point at which I would have to insert it in order to
> keep the list sorted. I can clearly do this with a series of if
> statements:
>
> if y<x[1]:
>     n = 0
> elif y < x[2]:
>     n = 1
> elif y < x[3]:
>     n = 2
> else:
>     n = 3
>
> Or with a generator comprehension
> n  = sum ( y>x[i] for i in range(len(x)) ) - 1
>
> But there  has to be a cleaner way, as the first approach is unwieldy
> and does not adapt to changing list lengths, and the second is not
> obvious to a casual reader of the code.
>
> My list will typically have 2 to 5 items, so speed is not a huge
> issue. I'd appreciate your guidance.
>
> Sincerely
>
> Thomas Philips

One way to do this would be to use the cmp built-in and loop over the
items in the list. Maybe something like this:

x = [0, 100, 200, 1000]
numLst = len(x)
count = 0
for i in range(numLst):
        resultOfCmp = cmp(newNum, x[count])
        if resultOfCmp == -1:
                print i
                x.insert(count, newNum)
                break
        count += 1

# Where newNum is the one to be inserted.

It's a hack, but it might get the ol' creative juices flowing.

Mike

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to