我需要迭代整数列表:
2, 3, 4, 6, 9, 13, 19, 28, 42, ...
所以一般规则是list[i+1] = list[i]*3/2
。
列表应在 10^34 或之前结束。
这意味着最后一个元素是 10^34*2/3 到 10^34 之间的数字。
我显然不能在内存中预先分配这个列表,所以类似:
list = [2]
while True:
next = list[-1]*3/2
if next > 10**34:
break
list.append(next)
这是不可能的。
我当然可以简单地使用上面的方法来迭代这些整数,而无需将它们存储在列表中或由某种迭代器生成。
但问题是我有嵌套循环,如下所示:
for i in xrange(...):
for j in xrange(...):
for m in xrange(...):
for n in xrange(...):
因此将其分解为多个 while
循环将使代码变得非常糟糕。
理想情况下,我希望有某种xrange
来“即时”生成这个数字列表(就像xrange
通常所做的那样)。
最佳答案
正如我在评论中提到的,该列表实际上不会很长。因此,您可以将其初始化为:
[int(2 * (1.5 ** n)) for n in range(int(math.log(10 ** 34, 1.5) - 1))]
但是,这实际上与您给出的示例略有不同,其中在生成下一个数字之前舍入为整数。在这种情况下,您将不得不做一些迭代(据我所知):
i = 2
lst = []
while i < 10 ** 34:
lst.append(i)
i = int(i * 1.5)
关于python - 迭代一个按指数增长的巨大整数列表,其中指数为 1.5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45171176/