创建具有固定数量元素(长度)的范围

时间:2014-11-20 15:56:19

标签: python python-2.7 floating-point range

在Python 2.7中,如何在具有固定数量元素的范围内创建列表,而不是在每个元素之间固定步骤?

>>> # Creating a range with a fixed step between elements is easy:
>>> range(0, 10, 2)
[0, 2, 4, 6, 8]
>>> # I'm looking for something like this:
>>> foo(0, 10, num_of_elements=4)
[0.0, 2.5, 5, 7.5]

4 个答案:

答案 0 :(得分:12)

我为此使用了numpy。

>>> import numpy as np
>>> np.linspace(start=0, stop=7.5, num=4)
array([ 0. ,  2.5,  5. ,  7.5])
>>> list(_)
[0.0, 2.5, 5.0, 7.5]

答案 1 :(得分:7)

您可以使用列表理解轻松生成这样的列表:

def foo(start, stop, count):
    step = (stop - start) / float(count)
    return [start + i * step for i in xrange(count)]

这会产生:

>>> foo(0, 10, 4)
[0.0, 2.5, 5.0, 7.5]

答案 2 :(得分:2)

itertools.count可以处理float:

>>> import itertools
>>> def my_range(start,stop,count):
...     step = (stop-start)/float(count)
...     for x in itertools.count(start,step):
...         if x < stop:
...             yield x
...         else:break
... 
>>> [x for x in my_range(0,10,4)]
[0, 2.5, 5.0, 7.5]

答案 3 :(得分:0)

这个怎么样:

>>> def foo(start=0, end=10, num_of_elements=4):
...     if (end-start)/num_of_elements != float(end-start)/num_of_elements:
...         end = float(end)
...     while start < end:
...         yield start
...         start += end/num_of_elements
...         
>>> list(foo(0, 10, 4))
[0, 2.5, 5.0, 7.5]
>>> list(foo(0, 10, 3))
[0, 3.3333333333333335, 6.666666666666667]
>>> list(foo(0, 20, 10))
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
>>> 

它使第一个元素的规范为整数,其他元素为浮点数。但如果你给它一个元素可以保持整数的步骤,它们就会。