On 3/19/2010 9:41 AM James Reynolds said...
<snipped and reformatted>

OK, so starting here:

def mcrange_gen(self, sample):
    lensample = len(sample)
    nx2 = self.nx1
    nx2_append = nx2.append
    nx2_sort = nx2.sort
    nx2_reverse = nx2.reverse
    nx2_index = nx2.index
    nx2_remove = nx2.remove
    for s in range(lensample):
        q = sample[s]
        nx2_append(q)
        nx2_sort()
        nx2_reverse()
        i = nx2_index(q)
        nx2_remove(q)
        yield i


First, the two lines:

    for s in range(lensample):
        q = sample[s]

variable s is never used again, so instead we'll do:

    for q in sample:

Which renders lensample as unused, so throw out

    lensample = len(sample)

We now have:


def mcrange_gen(self, sample):
    nx2 = self.nx1
    nx2_append = nx2.append
    nx2_sort = nx2.sort
    nx2_reverse = nx2.reverse
    nx2_index = nx2.index
    nx2_remove = nx2.remove
    for q in sample:
        nx2_append(q)
        nx2_sort()
        nx2_reverse()
        i = nx2_index(q)
        nx2_remove(q)
        yield i


Now, let's see what's going on for each q. You append it to self.nx1 (through the nx2 reference), then sort nx1, then reserve nx1, then scan for the new position of q, note the index, remove it from nx1, and yeild the index. OK, so that way you find out between which two elements of nx1 the current q falls, and i becomes the bin.

So, how about something like (untested):

def mcrange_gen(self, sample):
    self.nx1.sort() # now the bin boundries are in order
    for q in sample:
        ii = -1
        for binlimit in self.nx1:
            if q<binlimit:
                break
            ii += 1
        yield ii


But, I'd probably use bisect like this:

from bisect import bisect

def mcrange_gen(self, sample):
    self.nx1.sort() # now the bin boundries are in order
    for q in sample:
        yield bisect(self.nx1,q)


HTH,

Emile

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to