python for loop range(bigint)

时间:2010-07-01 06:10:49

标签: python

在Python中,是否有一些简短方式来执行

之类的操作

“for i in range(n)”

当n太大而Python无法实际创建数组范围(n)?

(简短因为否则我只是使用while循环)

4 个答案:

答案 0 :(得分:5)

您可以使用xrange() ...虽然 仅限于CPython中的“短”整数:

  

CPython实现细节:   xrange()旨在简单明了   快速。实施可能会施加   实现这一目标的限制。 C   Python的实现限制了所有   本地C长的论据(“短”   Python整数),也需要   元素的数量适合于   原生C长。如果范围更大   需要,替代版本可以   使用itertools模块制作:   takewhile(lambda x: x<stop, (start+i*step for i in count()))

我不知道这种限制是否也适用于其他实施(或哪些实施) - 但是列出了一种解决方法......

我知道你在问题标题中提到bigint,但问题正在讨论数字太大而无法创建数组 - 我怀疑有很多数字足够小xrange工作,但大到足以引起你range的记忆问题。

答案 1 :(得分:3)

我会使用生成器函数:即将发布的示例。

def gen():
    i = 0
    while 1: # or your special terminating logic
        yield i
        i = i + 1


for j in gen():
    do stuff

答案 2 :(得分:1)

你可以升级到python3。在那里,范围不仅限于“短”整数。

另一种解决方法是将xrange用于小整数,并将它们添加到循环内的某个常量,例如。

offset, upperlimit = 2**65, 2**65+100
for i in xrange(upperlimit-offset):
    j = i + offset
    # ... do something with j

答案 3 :(得分:0)

你应该总是使用xrange而不是range来循环n次,但要记住xrange也有一个限制(如果它太小你需要用一个计数器做你自己的while循环)

编辑:太晚了......