在Python中,是否有一些简短方式来执行
之类的操作“for i in range(n)”
当n太大而Python无法实际创建数组范围(n)?
(简短因为否则我只是使用while循环)
答案 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循环)
编辑:太晚了......