optimization question

Bengt Richter bokr at oz.net
Tue Aug 13 17:40:38 EDT 2002

On 13 Aug 2002 16:58:54 GMT, bokr at oz.net (Bengt Richter) wrote:
>you can write
>    W(s)[i:j]==t
>using (untested!)
>    class W:
>        from sys import maxint
>        def __init__(self, s, lo=0, hi=None):
>            self.s = s; self.lo = lo
>            if hi is None or hi == self.maxint: self.hi = len(s)
>            else: self.hi = hi

>        def __getitem__(self, i ):
>            if isinstance(i, int): return self.s[i] # single char
>            return W(self.s, i.start, i.stop) # simplified slice assumption for example!

Oops, __getitem__ should be relative to the [lo:hi] region of self.s, not the whole self.s.
Sorry, no time to fix (there's a little more to it than just adding self.lo), but I noticed
I left out the adjustments.

>        def __len__(self): return self.hi-self.lo
>        def __eq__(self, other): # like eqsub
>            return len(other) == (self.hi-self.lo) and self.s[self.lo:self.hi] == other
>        def __str__(self): return self.s[self.lo:self.hi]
>which I assume could be made reasonably fast in C.

Bengt Richter

More information about the Python-list mailing list