python for循环范围(大整数)
在Python中,有没有什么简短的方法可以做到类似
“for i in range(n)”
当n太大,以至于Python实际上无法创建数组range(n)的时候?
(之所以说简短,是因为如果没有这种情况,我就直接用while循环了)
4 个回答
1
你可以升级到python3。在这个版本中,range的范围不再局限于“小”整数。
另外一个解决办法是使用xrange来处理小整数,然后在循环内部加上一个常量,比如:
offset, upperlimit = 2**65, 2**65+100
for i in xrange(upperlimit-offset):
j = i + offset
# ... do something with j
3
我会使用一个生成器函数:接下来会给出例子。
def gen():
i = 0
while 1: # or your special terminating logic
yield i
i = i + 1
for j in gen():
do stuff
5
你可以使用 xrange(),不过在CPython中,它只适用于“短”整数:
CPython的实现细节: xrange()的设计目的是简单和快速。为了实现这一点,可能会有一些限制。Python的C实现将所有参数限制为本地的C长整型(也就是“短”Python整数),并且还要求元素的数量必须适合本地的C长整型。如果需要更大的范围,可以使用itertools模块来制作一个替代版本:
takewhile(lambda x: x<stop, (start+i*step for i in count()))
。
我不知道这个限制是否也适用于其他实现(或者哪些实现)——不过这里有一个解决办法...
我知道你在问题标题中提到了 bigint
,但是问题的内容提到数字太大,无法创建数组——我怀疑有很多数字对于 xrange
来说是足够小的,但对于 range
来说又会让你在内存上感到困扰。