使用for循环和范围函数与while循环



我正在寻找一个类似函数的范围,除了步骤是之前生成的数字的一小部分。因此,如果分数是99/100,那么这组数字可能是这样的:100,99,98.01…0.001

使用for循环和类似range的函数,或者只使用while循环,这会更有效吗?

到目前为止我拥有的代码:

stop = .001
current = 100
while current > stop:
#code
current *= 0.99

您可以使用np.geomspace:

np.geomspace(100, 12.5, 4)

您可以使用直接求幂的np.arange

12.5 * 2**np.arange(3, -1, -1)

np.logspace也是一个选项:

100 * np.logspace(0, -3, 4, base=2)

这里有一个函数可以做到这一点:

def fract(current, stop, fraction):
l=[current]
while l[-1]>stop:
l.append(l[-1]*fraction)
return l
>>> fract(100, 0.001, 0.5)
[100, 50.0, 25.0, 12.5, 6.25, 3.125, 1.5625, 0.78125, 0.390625, 0.1953125, 0.09765625, 0.048828125, 0.0244140625, 0.01220703125, 0.006103515625, 0.0030517578125, 0.00152587890625, 0.000762939453125]

如果你不想要最后一个项目(它小于停止(,只需在返回之前添加l.pop()

最新更新