对数列表范围构造

0 投票
1 回答
787 浏览
提问于 2025-04-18 18:21

我有一些代码用来创建一个数字范围的列表。不过我想要的是,随着数字的增大,这个列表的范围应该是递减的。现在我有的是一个线性增长的列表。

>>> a = []
>>> for i in xrange(0,100,5):
    a.append([i,i+5])   
>>> a
[[0, 5], [5, 10], [10, 15], [15, 20], [20, 25], [25, 30], [30, 35], [35, 40], [40, 45], [45, 50], [50, 55], [55, 60], [60, 65], [65, 70], [70, 75], [75, 80], [80, 85], [85, 90], [90, 95], [95, 100]]

我希望能得到一个增长速度递减的列表,就像对数函数那样。我不太确定怎么用Python来实现这个。一个列表的最后一个数字必须和下一个列表的第一个数字相等,并且数字只能是整数。谢谢大家的帮助!

1 个回答

1

你可以使用可变长度的范围:

a = []
length = 20
current = 0
maximum = 100
factor = 1.3
while current < maximum:
    new = min(maximum, current + length)
    a.append([current, new])
    current = new
    length = int(max(length / factor, 1))

根据你的需求调整 length(初始范围长度)和 factor(每个范围减少的值)。

示例输出:

[[0, 20], [20, 35], [35, 46], [46, 54], [54, 60], [60, 64], [64, 67], [67, 69], [69, 70], [70, 71], [71, 72], [72, 73], [73, 74], [74, 75], [75, 76], [76, 77], [77, 78], [78, 79], [79, 80], [80, 81], [81, 82], [82, 83], [83, 84], [84, 85], [85, 86], [86, 87], [87, 88], [88, 89], [89, 90], [90, 91], [91, 92], [92, 93], [93, 94], [94, 95], [95, 96], [96, 97], [97, 98], [98, 99], [99, 100]]

撰写回答