我需要定义一个包含所有可能的自然数的变量,或者至少包含1到100万的所有数字。
我不想使用range
功能,因为它不适用于我的特定目的。有没有其他方法来定义变量,以便它可以表示或包含0之后的任何数字?
编辑:
如果我在定义变量时使用range
它将包含一个数字列表,但我试图避免创建一个列表。
该计划为我提供了一个X
号码,但我不知道它是哪个号码,但我需要将该号码X
表示为变量var
< / p>
答案 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
,但没有支持start
或step
,也不需要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