J'ai une liste de flotteurs. Si je le fais 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 for
boucle pour parcourir la liste, mais cela ne fonctionnerait pas pour des structures de données plus complexes. J'aimerais quelque chose comme (j'invente complètement ça)
>>> 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]
la source
.replace("'", "")
pour me débarrasser de ces virgules.str(["{0:0.2f}".format(i) for i in a]).replace("'", "")
''
entouré. Par exemple, poura=[0.2222, 0.3333]
, il produira['0.22', '0.33']
.' '.join([{0:0.2f}".format(i) for i in a])
Une solution plus permanente consiste à sous
float
- classer :Le problème avec le sous
float
- classement est qu'il rompt le code qui recherche explicitement le type d'une variable. Mais pour autant que je sache, c'est le seul problème. Et un simplex = map(float, x)
annule la conversion enprettyfloat
.Tragiquement, vous ne pouvez pas simplement faire un patch de singe
float.__repr__
, car c'estfloat
immuable.Si vous ne voulez pas de sous
float
- classe , mais que la définition d'une fonction ne vous dérange pas,map(f, x)
c'est beaucoup plus concis que[f(n) for n in x]
la source
isinstance
doit être utilisé, pas l'égalité detype()
. Quand cela est fait correctement, une sous-classe de float sera toujours comptée comme float.Tu peux faire:
la source
Notez que vous pouvez également multiplier une chaîne comme "% .2f" (exemple: "% .2f" * 10).
la source
" ".join("%.2f" % x for x in yourlist)
car séparer la chaîne de format et les valeurs d'interpolation est bien pire que d'utiliser un idiome Python laid.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"
):la source
Python 2:
Python 3:
Production:
la source
L'option la plus simple devrait être d'utiliser une routine d'arrondi:
Cela produit la sortie:
la source
Je crois que Python 3.1 les imprimera mieux par défaut, sans aucun changement de code. Mais cela ne sert à rien si vous utilisez des extensions qui n'ont pas été mises à jour pour fonctionner avec Python 3.1
la source
Les comps de liste sont votre ami.
Essayez-le:
la source
Pour contrôler le nombre de chiffres significatifs , utilisez le spécificateur de format% g.
Appelons la solution d'Emile prettylist2f. Voici la version modifiée:
Usage:
Si vous voulez de la flexibilité dans le nombre de chiffres significatifs, utilisez plutôt le formatage de chaîne F :
la source
Vous pourriez utiliser des pandas.
Voici un exemple avec une liste:
Si vous avez un dict d et que vous voulez ses clés sous forme de lignes:
Et une autre façon de donner un dict à un DataFrame:
la source
Tout d'abord, les éléments d'une collection impriment leur repr. vous devriez vous renseigner sur
__repr__
et__str__
.C'est la différence entre print repr (1.1) et print 1.1. Joignons toutes ces chaînes au lieu des représentations:
la source
Je viens de rencontrer ce problème en essayant d'utiliser pprint pour générer une liste de tuples de flottants. Les compréhensions imbriquées peuvent être une mauvaise idée, mais voici ce que j'ai fait:
J'ai utilisé des expressions de générateur au début, mais pprint vient de reprendre le générateur ...
la source
Depuis Python 3.6, vous pouvez utiliser des chaînes f:
Vous pouvez utiliser les paramètres d'impression tout en gardant le code très lisible:
la source
J'ai eu ce problème, mais aucune des solutions ici n'a fait exactement ce que je voulais (je veux que la sortie imprimée soit une expression python valide), alors que diriez-vous de ceci:
Usage:
(Je sais que .format () est censé être la solution la plus standard, mais je trouve cela plus lisible)
la source
Je suis d'accord avec le commentaire de SilentGhost, la boucle for n'est pas si mal. Vous pouvez réaliser ce que vous voulez avec:
la source
Le code ci-dessous fonctionne bien pour moi.
la source