Создание списка равномерно расположенных номеров в определенном диапазоне в 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 

кажется слишком сложным. Есть идеи?

6 Solutions collect form web for “Создание списка равномерно расположенных номеров в определенном диапазоне в python”

Учитывая 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]) 

Вы можете использовать следующий подход:

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

нижний и / или верхний должны быть назначены как плавающие для этого подхода к работе.

Подобно ответу unutbu, вы можете использовать функцию arange of numpy, которая является аналоговым внутренним функциональным диапазоном python. Обратите внимание, что конечная точка не включена, как в диапазоне:

 >>> import numpy as N >>> a=N.arange(0,5,0.5) >>> a array([ 0. , 0.5, 1. , 1.5, 2. , 2.5, 3. , 3.5, 4. , 4.5]) >>> import numpy as N >>> a=N.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] 
 f = 0.5 a = 0 b = 9 d = [x * f for x in range(a, b)] 

был бы способ сделать это.

Вы можете использовать следующий код:

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

Как и ответ Говарда, но немного более эффективный:

 def my_func(low, up, leng): step = ((up-low) * 1.0 / leng) return [low+i*step for i in xrange(leng)] 
  • Что такое «гомогенность» в документации по списку Python?
  • Назначение списка с помощью
  • Определение списка в Python с использованием оператора умножения
  • удаление экземпляра объекта в списке python
  • mylist = list () vs mylist = в Python
  • Проверьте, содержит ли список только элемент x
  • «МОСТ-О» в python
  • Разбить список на части на основе набора индексов в Python
  • Python - лучший язык программирования в мире.