【发布时间】:2020-04-22 19:36:08
【问题描述】:
我需要迭代一个整数列表:
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,它会“即时”生成这个数字列表(就像xranges 通常那样)。
【问题讨论】:
-
其实列表不会很大:
math.log(10 ** 34, 1.5)返回 193。 -
@timchap:哎呀!!!!所以我也可以使用
range。知道如何以pythonic方式生成它(即在一行中)吗?谢谢 -
@timchap:有趣的是,在问这个问题之前,我已经在浏览器中打开了wolfram with this computation。
标签: python python-2.7