我如何打印1-9999的数字?

时间:2012-11-09 10:12:22

标签: python

我在这里尝试过,但它无法打印像这样的长号

for i in range(1,222222222222222):
    print i

错误:

Traceback (most recent call last):
  File "x.py", line 1, in <module>
    for i in range(1,222222222222222):
MemoryError

7 个答案:

答案 0 :(得分:10)

使用xrange

for i in xrange(1, 222222222222222):
    print i
  

此函数与range()非常相似,但返回“xrange对象”而不是列表。这是一个不透明的序列类型,它产生与相应列表相同的值,而不是实际同时存储它们。

答案 1 :(得分:4)

您可能正在使用Python2,其中range()生成一个数字列表。具有222222222222222元素的列表非常大,对于大多数RAM来说太大了。

与此相反,xrange()生成一个xrange对象,可以像列表一样访问(索引,迭代),但不会占用太多空间,因为值是按需计算的。

在Python3中,range()返回一个范围对象,该对象与2.x中的xrange对象完全相同。

答案 2 :(得分:4)

使用xrange而不是range。 range生成一个列表,将其存储在内存中并对每个项执行循环。这会在处理相当大的数字时产生内存错误。

xrange是一个不是列表的生成器,项目是动态创建的,所以它对内存没有害处

我希望这会有所帮助

答案 3 :(得分:2)

请使用xrange。 range函数实际构造了内存中的列表,而xrange返回一个生成器(类似于迭代器),并且一次只返回一个数字。

for i in xrange(1,222222222222222L):
    print i

详细了解主题here

答案 4 :(得分:1)

Python在开始循环之前创建范围,导致大量内存使用/ oom错误。

你最好使用xrange,它会以较小的部分分配范围。

for i in xrange(from, to):
    print i

答案 5 :(得分:0)

您也可以自己创建生成器using yield

def my_gen(start, end, step):
    while start < end:
        start += step
        yield start

for x in my_gen(1, 1000, 2):
    print x

答案 6 :(得分:-1)

查看While循环

的此示例
a = 0
while a < 10 :
    a += 1
    print (a)

您也可以使用“For Loop”

执行相同操作
onetoten = range(1,11)
for count in onetoten:
    print (count)