119 votes

Facile jolie impression de flotteurs en python?

J'ai une liste de flotteurs. Si je simplement print , cela se présente comme ceci:

 [9.0, 0.052999999999999999, 0.032575399999999997, 0.010892799999999999, 0.055702500000000002, 0.079330300000000006]
 

Je pourrais utiliser print "%.2f" , ce qui nécessiterait une boucle for pour parcourir la liste, mais cela ne fonctionnerait pas pour des structures de données plus complexes. Je voudrais quelque chose comme (je suis complètement inventer cela)

 >>> import print_options
>>> print_options.set_float_precision(2)
>>> print [9.0, 0.052999999999999999, 0.032575399999999997, 0.010892799999999999, 0.055702500000000002, 0.079330300000000006]
[9.0, 0.05, 0.03, 0.01, 0.06, 0.08]
 

117voto

voyager Points 17283

Comme personne n'a ajouté, il convient de noter que le fait d'aller de l'avant à partir de la version 2.6 de Python+ la méthode recommandée pour la chaîne de formatage est avec format, pour être prêt pour Python 3+.

print ["{0:0.2f}".format(i) for i in a]

La nouvelle chaîne de formatage de la syntaxe n'est pas difficile à utiliser, et pourtant il est assez puissant.

J'ai pensé que peut-être pprint pourrait avoir quelque chose, mais je n'ai rien trouvé.

84voto

Robert Rossney Points 43767

Une solution plus permanente est à la sous-classe float:

>>> class prettyfloat(float):
    def __repr__(self):
        return "%0.2f" % self

>>> x
[1.290192, 3.0002, 22.119199999999999, 3.4110999999999998]
>>> x = map(prettyfloat, x)
>>> x
[1.29, 3.00, 22.12, 3.41]
>>> y = x[2]
>>> y
22.12

Le problème avec les sous-classement float c'est qu'elle casse du code explicitement à la recherche pour le type d'une variable. Mais pour autant que je peux dire, c'est le seul problème avec elle. Et un simple x = map(float, x) annule la conversion en prettyfloat.

Malheureusement, vous ne pouvez pas simplement monkey patch- float.__repr__car float's immuable.

Si vous ne voulez pas pour sous - float, mais n'avez pas l'esprit la définition d'une fonction, map(f, x) est beaucoup plus concis que [f(n) for n in x]

38voto

Pablo Santa Cruz Points 73944

Tu peux faire:

 a = [9.0, 0.052999999999999999, 0.032575399999999997, 0.010892799999999999, 0.055702500000000002, 0.079330300000000006]
print ["%0.2f" % i for i in a]
 

26voto

dalloliogm Points 2628

Notez que vous pouvez également multiplier une chaîne telle que "% .2f" (exemple: "% .2f" * 10).

 >>> print "%.2f "*len(yourlist) % tuple(yourlist)
2.00 33.00 4.42 0.31
 

8voto

fortran Points 26495
 print "[%s]"%", ".join(map(str,yourlist))
 

Cela évitera les erreurs d'arrondi dans la représentation binaire lors de l'impression, sans introduire de contrainte de précision fixe (comme le formatage avec "%.2f" ):

 [9.0, 0.053, 0.0325754, 0.0108928, 0.0557025, 0.0793303]
 

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