我在这里尝试过,但它无法打印像这样的长号
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
答案 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)