我在这里试过,但它不能打印这样的长数字
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
我在这里试过,但它不能打印这样的长数字
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
使用 xrange
.
for i in xrange(1, 222222222222222):
print i
此函数与 range() 非常相似,但返回的是“xrange 对象”而不是列表。这是一种不透明的序列类型,它产生与相应列表相同的值,但实际上并没有同时存储它们。
您可能正在使用 Python2,它range()
会生成一个数字列表。包含 222222222222222 元素的列表非常大,对于大多数 RAM 来说太大了。
与此相反,xrange()
生成一个 xrange 对象,可以像列表一样访问(索引,迭代),但不会占用太多空间,因为值是按需计算的。
在 Python3 中,range()
返回一个范围对象,它与 2.x 中的 xrange 对象完全一样。
使用 xrange 代替范围。range 生成一个列表,将其存储在内存中并对每个项目执行循环。这在处理相当大的数字时会产生内存错误。
xrange 是生成器而不是列表,项目是动态创建的,因此不会损害内存
我希望这有帮助
请改用 xrange。range 函数实际上是在内存中构造列表,而 xrange 返回一个生成器(类似于迭代器),并且一次只返回一个数字。
for i in xrange(1,222222222222222L):
print i
在此处查看有关该主题的更多信息
Python 在开始循环之前创建范围,导致大量内存使用/oom 错误。
你最好使用 xrange,它以更小的部分分配范围。
for i in xrange(from, to):
print i
您也可以自己使用 yield创建生成器:
def my_gen(start, end, step):
while start < end:
start += step
yield start
for x in my_gen(1, 1000, 2):
print x
检查这个 While 循环的例子
a = 0
while a < 10 :
a += 1
print (a)
你也可以使用“For Loop”来做同样的事情
onetoten = range(1,11)
for count in onetoten:
print (count)