代表所有数字的变量?

时间:2016-04-19 00:12:48

标签: python

我需要定义一个包含所有可能的自然数的变量,或者至少包含1到100万的所有数字。

我不想使用range功能,因为它不适用于我的特定目的。有没有其他方法来定义变量,以便它可以表示或包含0之后的任何数字?

编辑: 如果我在定义变量时使用range它将包含一个数字列表,但我试图避免创建一个列表。

该计划为我提供了一个X号码,但我不知道它是哪个号码,但我需要将该号码X表示为变量var < / p>

1 个答案:

答案 0 :(得分:4)

在Python 3.2及更高版本中,使用range正确地表示一个容量为1到100万的容器:

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

效率极高;实际上并未生成范围中的数字,而是以数学方式计算成员资格(或缺少成员资格)。

如果你需要一些支持任何正整数的等效对象,或者需要在Python 2.x中使用它,你必须编写自己的类,但这并不难:

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):
        try:
             x = index(x)
        except TypeError:
             return False
        return x >= 1 and (self.maxnum is None or x < self.maxnum)

这类似于range,但没有支持startstep,也不需要stop,因此您可以进行恒定时间成员资格测试:< / p>

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