在Python中生成指定范围内均匀间隔的数字列表
怎样用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])