pls help me with this prog

Tim Roberts timr at probo.com
Sat Oct 20 22:33:01 EDT 2012


inshu chauhan <insideshoes at gmail.com> wrote:
>
>but i want to calculate it for every 3 points not the whole data, but
>instead of giving me centre for every 3 data the prog is printing the
>centre 3 times...
>
>def main (data):
>    j = 0
>    for  i in data[:3]:
>        while j != 3:
>         centre = CalcCentre(data)
>         j += 1
>         print centre

This loop doesn't do what you think it does.  Think about the problem you
have to solve.  You have a set of data.  You want to operate on the whole
set, 3 points at a time.  What this loop does is grab the first three
points (only), then calculates the center on the entire list three times.

You want something like:

    # As long as there is data in the list:
    while data:
        # Split the list into two parts: first 3 and the rest.
        first3, data = data[3:],data[3:]
        # Operate on the first three.
        print CalcCenter( first3 )

To make it a little more resilient, you might make sure that len(data) is a
multiple of 3, or at least stop when it is shorter than 3.

To be more clever, you can write a function that returns 3 at a time:

def N_at_a_time( iter, n ):
    while len(iter) >= n:
        yield iter[:n]
        iter = iter[n:]

Now you can do this:

def main(data):
    for first3 in N_at_a_time(data, 3):
        print CalcCenter(first3)
-- 
Tim Roberts, timr at probo.com
Providenza & Boekelheide, Inc.



More information about the Python-list mailing list