【问题标题】:Logarithmic list range construction对数列表范围构造
【发布时间】:2014-08-24 14:41:36
【问题描述】:

我有一些代码来创建列表编号范围的列表。但是,我想要的是列表随着数字的增加而减小。这是我目前的线性增长列表。

>>> 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 来实现这一点。一个列表末尾的数字必须等于下一个列表的开头,并且数字只能是整数。感谢您的帮助!

【问题讨论】:

    标签: python math logarithm


    【解决方案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]]
    

    【讨论】:

    • 不错的答案,但我必须使我的因子非常小,因为当前和最大值之间的范围变大(> 10000)。有没有办法降低因子的敏感性?
    • @user3818749 你当然可以把它减少到你需要的任何值,例如,1.3 ** 0.25 会给你[[0, 20], [20, 38], [38, 54], [54, 68], [68, 81], [81, 93], [93, 100]](它只会快速减少1/4
    猜你喜欢
    • 1970-01-01
    • 2014-03-24
    • 2014-11-14
    • 2021-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-28
    • 2020-07-02
    相关资源
    最近更新 更多