Votre code d'origine était proche, et de lire plus facilement que une expression laconique. Le problème avec votre code est un couple d'erreurs mineures: initialisation new_value
chaque fois dans l'analyse initiale, plutôt qu'une seule fois; et en remplaçant le max_list
par un scalaire calculé tout en le bouclant en tant que liste.
Sur la dernière ligne, vous devez avoir l'intention:
max_list[i] = float(max_list[i])/new_value
mais vous avez laissé tomber l'index du tableau, qui remplacerait la liste avec une valeur unique. Lors de la deuxième itération de la boucle, votre Python donnerait une exception en raison de l'index invalide dans une non-liste. Comme votre code développe des valeurs de plus en plus grandes de new_value à mesure qu'il progresse, je vous recommande de ne pas remplacer les éléments de la liste lors de la première analyse. Faire une deuxième analyse une fois que vous calculez une valeur finale pour new_value:
max_list = [83, 1350, 1, 100]
# Calculate the required "normalizing" power-of-ten
new_value = 1.0
for i in range(len(max_list)):
while new_value < max_list[i]:
new_value *= 10.0
# Convert the values to fractions in [0.0, 1.0]
for i in range(len(max_list)):
max_list[i] = max_list[i]/new_value
print max_list
# "[0.0083000000000000001, 0.13500000000000001, 0.0001, 0.01]"
Notez que je requis pour initialiser new_value comme si elle était une valeur à virgule flottante, afin qu'il entraînerait quotients à virgule flottante. Il existe d'autres manières de procéder, par exemple en utilisant float(max_list[i])
pour récupérer la valeur pour la normalisation. Le calcul initial de new_value
commençait sur chaque élément, de sorte que votre exemple retournerait parce que cela a été basé sur l'élément final dans la liste d'entrée, qui est 100.
Il devrait être 1350 -> 1000. –
Non, je veux que ça passe à 10000. Je vais diviser les valeurs par ces nombres plus tard. J'ai besoin qu'il soit de 1350/10000 = 0.135 donc c'est dans la gamme [0, 1]. – iceburn
Vous voulez tous les nombres normalisés à la même puissance de dix, non? Vous n'avez pas besoin d'expressions différentes pour 'new_value', vous avez besoin de deux passes. –