[Tutor] Indexing sequences with long integers

Tim Peters tim_one@email.msn.com
Tue, 18 May 1999 00:46:07 -0400


[Jon Cosby]
> Hi - Is there any way to index sequences with long integers?

No, at least none of the builtin sequences.  If know the longs have
reasonably small values, you can do sequence[int(the_long)] though (which
will raise an exception if the long is too big to fit in an int).

> I see you can't multiply sequences with long values, or assign them to
> the range function. I'd like to be able to apply the following code,
>
>     for i in range(min, max, 2):
>         if primeTest(i) == 1:
>             pl.append(i)
>     return pl
>
> to long values for min amd max. Any suggestion?

i = min
while i < max:
    ...
    i = i + 2

or

for offset in range(0, int(max - min), 2):
    i = min + offset
    ...

If max-min isn't small enough to fit in an int, you'll die long before the
program could have completed anyway <wink>.

Or you could define your own sequence type, like:

class LongRange:
    def __init__(self, min, max, step):
        if step == 0:
            raise ValueError("LongRange step must not be zero.")
        self.min = min
        self.max = max
        self.step = step

    def __getitem__(self, i):
        this = self.min + i * self.step
        if self.step > 0:
            if this < self.max:
                return this
        else:
            if this > self.max:
                return this
        raise IndexError

for i in LongRange(1000000000000000L, 1000000000000010L, 2):
    print i

longingly y'rs  - tim