在python中创建一定范围内均匀间隔的数字列表

时间:2011-07-13 18:23:34

标签: list range python

什么是pythonic方法,在给定边界之间制作包含均匀间隔数字(不仅仅是整数)的任意长度列表?例如:

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 个答案:

答案 0 :(得分:54)

鉴于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])

答案 1 :(得分:30)

您可以使用以下方法:

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

lower和/或upper指定为浮动才能使此方法起作用。

答案 2 :(得分:7)

与unutbu的答案类似,你可以使用numpy的arange函数,它类似于Python的内在函数range。请注意,不包括终点,如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]

答案 3 :(得分:2)

f = 0.5
a = 0
b = 9
d = [x * f for x in range(a, b)]

将是一种方法。

答案 4 :(得分:1)

您可以使用以下代码:

def float_range(initVal, itemCount, step):
    for x in xrange(itemCount):
        yield initVal
        initVal += step

[x for x in float_range(1, 3, 0.1)]

答案 5 :(得分:0)

类似霍华德的回答,但效率更高:

def my_func(low, up, leng):
    step = ((up-low) * 1.0 / leng)
    return [low+i*step for i in xrange(leng)]

答案 6 :(得分:0)

Numpy的r_便捷功能还可以使用语法np.r_[start:stop:steps]创建间距均匀的列表。如果steps是实数(以j结尾),则包含端点,该端点等于np.linspace(start, stop, step, endpoint=1),否则不包含端点。

>>> np.r_[-1:1:6j, [0]*3, 5, 6]
array([-1. , -0.6, -0.2,  0.2,  0.6,  1.])

您还可以直接连接其他数组和标量:

>>> np.r_[-1:1:6j, [0]*3, 5, 6]
array([-1. , -0.6, -0.2,  0.2,  0.6,  1. ,  0. ,  0. ,  0. ,  5. ,  6. ])