我試圖在這裏,但它不能打印長的數字像這樣如何從1-9999打印數字?
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
我試圖在這裏,但它不能打印長的數字像這樣如何從1-9999打印數字?
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而不是範圍。 範圍生成一個列表,將其存儲在內存中並對每個項目執行循環。這在處理相當大的數字時會產生內存錯誤。
x範圍是發電機不是一個名單,是動態創建的項目,因此它不會對內存
傷害我希望這有助於
使用xrange
。
for i in xrange(1, 222222222222222):
print i
This function is very similar to range(), but returns an 「xrange object」 instead of a list. This is an opaque sequence type which yields the same values as the corresponding list, without actually storing them all simultaneously.
'的xrange(222222222222222)'會引發'Overflow'錯誤。 –
Python中,你開始循環之前,產生了巨大的內存使用/ OOM錯誤的產生量的範圍內。
你最好使用xrange,它分配小塊的範圍。
for i in xrange(from, to):
print i
改爲使用xrange。範圍函數實際上在內存中構造列表,而xrange返回一個生成器(類似於迭代器),並且一次只返回一個數字。
for i in xrange(1,222222222222222L):
print i
查看更多關於該主題here
檢查while循環
a = 0
while a < 10 :
a += 1
print (a)
您也可以使用做同樣的 「For循環」 這個例子
onetoten = range(1,11)
for count in onetoten:
print (count)
這不是非常pythonic。 – 2012-11-09 10:17:21
的questionner抱怨'範圍()'不是適合他的目的和你建議使用'範圍()'呢?有趣。 – glglgl
@glglgl'的xrange()'可能不適合這麼大的INT'222222222222222',它提出了'OverFlowError'我的32位系統上運行,請參閱[這裏](http://stackoverflow.com/questions/2187135/range-和-xrange-for-13-digit-numbers-in-python),所以'while-loop'可能是一個更好的解決方案。 –
您可能正在使用Python2,其中range()
產生一個數字列表。包含222222222222222元素的列表非常大,對於大多數RAM來說太大。
與此相反,xrange()
產生一個xrange對象,它可以像列表一樣訪問(索引,迭代),但不會佔用太多的空間,因爲這些值是按需計算的。
在Python3中,range()
返回的範圍對象與2.x中的xrange對象非常相似。
你也可以自己創建發電機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
9999!= 222222222222222.你知道嗎? –
@RohitJain這個微小的差異可以在戰鬥中避開讀者的注意。 – 2012-11-09 10:16:35
@Tichodroma ..大聲笑。嗯你是對的。 ;) –