在Python中生成指定范围内均匀间隔的数字列表

67 投票
7 回答
202348 浏览
提问于 2025-04-16 21:27

怎样用Python的方式创建一个长度不固定的列表,里面包含在给定范围内均匀分布的数字(不仅仅是整数)呢?比如说:

my_func(0,5,10) # ( lower_bound , upper_bound , length )
# [ 0, 0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5 ] 

要注意的是,Range()这个函数只处理整数。而这个:

def my_func(low,up,leng):
    list = []
    step = (up - low) / float(leng)
    for i in range(leng):
        list.append(low)
        low = low + step
    return list

看起来太复杂了。有谁有什么好主意吗?

7 个回答

14

和unutbu的回答类似,你可以使用numpy的arange函数,它的功能和Python自带的range函数很像。需要注意的是,arange的结束点是不包括在内的,就像range一样:

>>> import numpy as np
>>> a = np.arange(0,5, 0.5)
>>> a
array([ 0. ,  0.5,  1. ,  1.5,  2. ,  2.5,  3. ,  3.5,  4. ,  4.5])
>>> a = np.arange(0,5, 0.5) # returns a numpy array
>>> a
array([ 0. ,  0.5,  1. ,  1.5,  2. ,  2.5,  3. ,  3.5,  4. ,  4.5])
>>> a.tolist() # if you prefer it as a list
[0.0, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5]
53

你可以使用以下方法:

[lower + x*(upper-lower)/length for x in range(length)]

在这个方法中,lower和upper必须被设置为小数(浮点数),这样才能正常工作。

95

如果你在使用numpy这个库,可以用linspace这个函数:

包含右边的端点(5):

In [46]: import numpy as np
In [47]: np.linspace(0,5,10)
Out[47]: 
array([ 0.        ,  0.55555556,  1.11111111,  1.66666667,  2.22222222,
        2.77777778,  3.33333333,  3.88888889,  4.44444444,  5.        ])

不包含右边的端点:

In [48]: np.linspace(0,5,10,endpoint=False)
Out[48]: array([ 0. ,  0.5,  1. ,  1.5,  2. ,  2.5,  3. ,  3.5,  4. ,  4.5])

撰写回答