python - 迭代一个按指数增长的巨大整数列表,其中指数为 1.5

标签 python python-2.7

我需要迭代整数列表:

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/

相关文章:

python - 允许直接在类主体中使用语句有什么意义?

python - Mongo推送到数组内的数组

Python/postgres/psycopg2 : getting ID of row just inserted

python - 如何增强python中内置函数的特性?

python - 使用整数值的 numpy 数组时处理字符串值

python - 为什么某些 Python 函数在参数列表周围有一组额外的括号?

python - mypy 如何忽略源文件中的一行?

python - 通过socket发送wav文件

python - 利用遗传算法克服模型中不同大小的数据集

python - 在 python 中转义 unicode 字符串