Nedzad Ganic Nedzad Ganic - 11 months ago 43
Python Question

Variable that represents all numbers?

I need to define a variable that contains all possible natural numbers, or at least all numbers from 1 to a million.

I don't want to use the

function because it is not applicable for my particular purpose. Is there any other way to define the variable so it can represent, or contain any number after 0?

If I use the
while defining the variable it will contain a list of numbers, but I am trying to avoid creating a list.

The program is giving me a number
and I don't know which number it is, but I need to have that number
represented with the variable

Answer Source

In Python 3.2 and higher, representing a container with all integers from 1 to a million is correctly done with range:

>>> positive_nums_to_1M = range(1, 1000001)
>>> 1 in positive_nums_to_1M
>>> 1000000 in positive_nums_to_1M
>>> 0 in positive_nums_to_1M

It's extremely efficient; the numbers in the range aren't actually generated, instead the membership (or lack thereof) is computed mathematically.

If you need some equivalent object that supports any positive integer, or need it in Python 2.x, you'll have to write your own class, but it's not hard:

from operator import index

class natural_num_range(object):
    def __init__(self, maxnum=None):
        if maxnum is not None:
            maxnum = index(maxnum)  # Ensure a true native int (or long)
        self.maxnum = maxnum

    def __contains__(self, x):
             x = index(x)
        except TypeError:
             return False
        return x >= 1 and (self.maxnum is None or x < self.maxnum)

That does something similar to range, but without supporting a start or step, and not requiring a stop, so you can do constant time membership tests:

>>> natural = natural_num_range()
>>> all(i in natural for i in range(1, 10000000, 10000))
>>> any(i in natural for i in range(-100000000, 0, 10000))