range()函数的上限是什么,我该如何扩展它,或者最好的方法是什么:
for i in range(1,600851475143):
Run Code Online (Sandbox Code Playgroud)
range(1, 600851475143)想在内存中生成一个非常大的列表,你会得到一个内存不足的错误.要节省内存,请使用xrange而不是range.不幸的是,xrange不适用于大数(这是一个实现限制)示例(引发OverflowError):
for i in xrange(1, 600851475143):
print i
Run Code Online (Sandbox Code Playgroud)
range如果差异很小,您可以在区间中设置较大的最小值或最大值.例:
x = 1 << 200
print list(xrange(x, x + 3))
Run Code Online (Sandbox Code Playgroud)
输出:
[1606938044258990275541962092341162602522202993782792835301376L, 1606938044258990275541962092341162602522202993782792835301377L, 1606938044258990275541962092341162602522202993782792835301378L]
Run Code Online (Sandbox Code Playgroud)
原始for循环问题的奇特解决方案:
def bigrange(a, b = None):
if b is None:
b = a
a = 0
while a < b:
yield a
a += 1
for i in bigrange(1, 600851475143):
print i
Run Code Online (Sandbox Code Playgroud)
一个不那么花哨的解决方案,即使你continue在循环体中也能工作:
i = 1 - 1
while i < 600851475143 - 1:
i += 1
print i
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1622 次 |
| 最近记录: |