web-dev-qa-db-fra.com

Comment avoir plus de contrôle sur les incréments de boucle en Python?

J'essaie de boucler de 0 à 1 en utilisant des tailles de pas de 0,01 (par exemple). Comment pourrais-je m'y prendre? La for i in range(start, stop, step) accepte uniquement des arguments entiers, les flottants ne fonctionneront donc pas. 

19
efficiencyIsBliss
for i in [float(j) / 100 for j in range(0, 100, 1)]:
    print i
22
Santa

Évitez de composer des erreurs en virgule flottante avec cette approche. Le nombre d'étapes est comme prévu, tandis que la valeur est calculée pour chaque étape.

def drange2(start, stop, step):
    numelements = int((stop-start)/float(step))
    for i in range(numelements+1):
            yield start + i*step
Usage:

for i in drange2(0, 1, 0.01):
    print i
4
WombatPM

Une option:

def drange(start, stop, step):
    while start < stop:
            yield start
            start += step

Usage:

for i in drange(0, 1, 0.01):
    print i
1
carl

vous pouvez utiliser les compréhensions de liste soit:

print([i for i in [float(j) / 100 for j in range(0, 100, 1)]])

si vous voulez contrôler l'impression, faites quelque chose comme ça:

print(['something {} something'.format(i) for i in [float(j) / 100 for j in range(0, 100, 1)]])

ou

list(i for i in [float(j) / 100 for j in range(0, 100, 1)])
0
user677607

Eh bien, vous pouvez faire passer votre boucle de 0 à 100 avec un pas de la taille de 1 qui vous donnera le même nombre de pas. Ensuite, vous pouvez diviser i par 100 pour tout ce que vous alliez en faire.

0
James Arwick

Je dirais que la meilleure façon utilise numpy array.

Si vous voulez faire une boucle de -2 à +2 avec une augmentation de 0,25, voici comment je le ferais:

Start = -2
End = 2
Increment = 0.25
Array =  np.arange(Start, End, Increment)

for i in range(0, Array.size):
    print (Array[i])

0
user2538077