Weird behavior in search in a list

2007-03-29 Thread Su Y
hi all,
I can't understand how this code work, its behavior is really weird
for me...

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-- 
http://mail.python.org/mailman/listinfo/python-list

Re: Weird behavior in search in a list

2007-03-29 Thread Su Y
On 3月29日, 下午7时51分, "Su Y" <[EMAIL PROTECTED]> wrote:
> hi all,
> I can't understand how this code work, its behavior is really weird
> for me...
>
> I want find the first number in extend[] which is larger than num, soI wrote:
>
> def find(num):
> count=0
> for elem in extend:
> if elem 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

and I am using Python 2.5 on WinXP.

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

Re: Weird behavior in search in a list

2007-03-29 Thread Su Y
On 3月29日, 下午8时22分, Michael Bentley <[EMAIL PROTECTED]> wrote:
> 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 > 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

oh yes, it's the "break" I forgot... Thank you, it helps me a lot!

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