python for循环范围(大整数)

3 投票
4 回答
4989 浏览
提问于 2025-04-16 00:39

在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 来说又会让你在内存上感到困扰。

撰写回答