python:我可以扩展range()方法的上限吗?

Jos*_*erg 3 python

range()函数的上限是什么,我该如何扩展它,或者最好的方法是什么:

for i in range(1,600851475143):
Run Code Online (Sandbox Code Playgroud)

pts*_*pts 9

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)

  • @Bastien实际上范围已被删除,xrange重命名范围.如果你真的想要一个列表,你可以写deck = list(range(52)),但它鼓励你使用迭代器,除非你真的需要列表. (4认同)