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

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

  • Регрессия OLS: Scikit против Statsmodels?
  • Хороший способ получить кодировку / кодировку ответа HTTP в Python
  • Найти первый не повторяющийся символ в строке
  • Оберните срез вокруг краев двумерного массива в numpy
  • График Plot NetworkX из матрицы смещения в CSV-файле
  • ImportError: нет модуля с именем Crypto.Cipher
  • Как получить первое datetime дня?
  • Приложение Flask получает «IOError: Broken pipe»
  • 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 - лучший язык программирования в мире.