range question, compared to Smalltalk

Tim Peters tim.one at comcast.net
Tue Aug 27 17:18:07 EDT 2002


[Frank Buss]
> I'm a Python newbie, so forgive me, if I'm asking stupid questions :-)
>
> If I write this:
>
> import random
> random.choice(range(0, 100000000))

Python's range(i, j) always builds an explicit list with max(0, j-i)
integers.

> it took very long to calculate a random number (I know, I can use
> "random.randint(0, 1000000000)").

random.randrange(1000000000) would be best.

> Looks like "range" returns a normal list.

Right.

> Why not an object?

A list is an object.

> If I write this in Smalltalk:
>
> (0 to: 1000000000000) at: 12345678901
>
> I get the result immediately. If I write "range(0, 1000000000)" in Python
> I'll get a Memory Error.

So don't do that in Python.

> Another question: How can I generate very high random numbers? If I write
> "random.randint(0L, 100000000000000L)" I'll get an overflow error.

Working with unbounded ints often requires entirely different algorithms.
Here's one way people have found useful for generating random huge ints:

    <http://www.faqts.com/knowledge_base/view.phtml/aid/4406>

> I thought everything is an object

That's so, yes.

> and I can use small and long integers as I want.

You can *try* to, sure.  Some operations have limits, though, and some
algorithms have limitations.  You're not going to have much luck with

    s = 'x' * 100000000000000000000000000000000000

either <wink>.





More information about the Python-list mailing list