2009-11-27 5 views
0

mon tableau L1 contient des nombres comme 0,029999999999999999 que je veux imprimer 0,03python: comment éviter « index de liste hors de portée » dans ce simple boucle while

mon code fonctionne, mais donne une erreur au fin car le dernier compte est hors limites. Je comprends pourquoi ça casse, mais je ne sais pas comment y remédier. grâce

count = 1 

while L1: 
    print "%.2f" %L1[count] 
    count = count + 1 
+0

merci, mais c'est un peu plus complexe en ce sens que je veux créer un nouveau tableau qui contient les chiffres arrondis, im à un peu de perte de comment faire sans un compteur, ce qui est habituellement comment je le fais – amuk

+0

tandis que la condition devrait vérifier L1 [compte], pas seulement L1. La valeur de vérité de L1 ne change jamais. – jpsimons

Répondre

9

Si vous souhaitez imprimer tous les numéros L1, utilisez:

for x in L1: print '%.2f' % x 

Si vous voulez sauter le premier, for x in L1[1:]: fonctionnera.

Modifier: (!) L'OP mentionne dans un commentaire que leur désir est en fait de « créer un nouveau tableau » (je pense qu'ils veulent dire en fait « une nouvelle liste », pas un array.array, mais qui ne serait pas être très différent). Il n'y a pas de "nombres arrondis" dans le monde flottant - vous pouvez utiliser round(x, 2), mais cela vous donnera toujours un flottant, donc il n'aura pas nécessairement "exactement 2 chiffres". Quoi qu'il en soit, pour une liste de chaînes:

newlistofstrings = ['%.2f' % x for x in L1] 

ou pour un avec des nombres décimaux (qui peut avoir exactement 2 chiffres, si vous voulez):

import decimal 
newlistofnnumbers = [decimal.Decimal('%.2f') % x for x in L1] 
2

Pourquoi ne pas simplement la boucle à travers la liste L1 au lieu de faire une boucle while?

for i in L1: 
    print "%.2f" % i 

keep it simple :)

0

2 problèmes:

  1. Votre boucle se termine jamais (en L1)
  2. Vous commencez avec l'indexation 1 (count = 1 initialisation

Mieux, comme t il d'autres ont dit:

for i in L1: 
    print "%.2f" % i 

et si vous avez aussi besoin de l'index (nombre):

for (index, item) in enumerate(L1): 
    print "Element number (0-based) %d is %f" % (index, item) 

Voir aussi Pythonic expressions pour une certaine manière plus agréable à utiliser python.

Questions connexes