68 votes

Faire une liste de nombres régulièrement espacés dans une certaine plage en python

Quelle est une manière pythonique de faire une liste de longueur arbitraire contenant des nombres régulièrement espacés (pas seulement des entiers entiers) entre des limites données ? Par exemple:

 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 ] 

Notez que la fonction Range() ne traite que des entiers. Et ça:

 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

semble trop compliqué. Des idées?

95voto

unutbu Points 222216

Étant donné numpy, vous pouvez utiliser linspace :

Y compris l'extrémité droite (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.        ])

À l'exclusion du point de terminaison droit :

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

54voto

Howard Points 23487

Vous pouvez utiliser l'approche suivante :

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

inférieur et/ou supérieur doivent être assignés comme flottants pour que cette approche fonctionne.

14voto

milancurcic Points 4976

Semblable à la réponse d'unutbu, vous pouvez utiliser la fonction arange de numpy, qui est analogue à la fonction intrinsèque de Python range . Notez que le point final n'est pas inclus, comme dans 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]

4voto

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

serait un moyen de le faire.

1voto

Artsiom Rudzenka Points 9771

Vous pouvez utiliser le code suivant :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X