Tengo una lista de carrozas. Si simplemente print
lo hago , se muestra así:
[9.0, 0.052999999999999999, 0.032575399999999997, 0.010892799999999999, 0.055702500000000002, 0.079330300000000006]
Podría usar print "%.2f"
, lo que requeriría un for
bucle para recorrer la lista, pero luego no funcionaría para estructuras de datos más complejas. Me gustaría algo como (me lo estoy inventando por completo)
>>> 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]
fuente
.replace("'", "")
para deshacerme de esas comas.str(["{0:0.2f}".format(i) for i in a]).replace("'", "")
''
a su alrededor. Por ejemplo,a=[0.2222, 0.3333]
producirá['0.22', '0.33']
.' '.join([{0:0.2f}".format(i) for i in a])
Una solución más permanente es la subclase
float
:El problema con las subclases
float
es que rompe el código que busca explícitamente el tipo de variable. Pero por lo que yo sé, ese es el único problema. Y un simplex = map(float, x)
deshace la conversión aprettyfloat
.Trágicamente, no se puede simplemente parchear
float.__repr__
, porquefloat
es inmutable.Si no desea crear una subclase
float
, pero no le importa definir una función,map(f, x)
es mucho más conciso que[f(n) for n in x]
fuente
isinstance
debe usar, no la igualdad detype()
. Cuando se hace correctamente, una subclase de flotante seguirá contando como flotante.Tu puedes hacer:
fuente
Tenga en cuenta que también puede multiplicar una cadena como "% .2f" (ejemplo: "% .2f" * 10).
fuente
" ".join("%.2f" % x for x in yourlist)
ya que separar la cadena de formato y los valores de interpolación es mucho peor que usar un lenguaje feo de Python.Esto evitará los errores de redondeo en la representación binaria cuando se imprima, sin introducir una restricción de precisión fija (como formatear con
"%.2f"
):fuente
Python 2:
Python 3:
Salida:
fuente
La opción más sencilla debería ser utilizar una rutina de redondeo:
Esto produce la salida:
fuente
Creo que Python 3.1 los imprimirá mejor por defecto, sin ningún cambio de código. Pero eso es inútil si usa extensiones que no se han actualizado para funcionar con Python 3.1
fuente
Las listas de composición son tus amigas.
Intentalo:
fuente
Para controlar el número de dígitos significativos , utilice el especificador de formato% g.
Vamos a nombrar la solución de Emile prettylist2f. Aquí está el modificado:
Uso:
Si desea flexibilidad en la cantidad de dígitos significativos, use el formato de cadena f en su lugar:
fuente
Podrías usar pandas.
A continuación se muestra un ejemplo con una lista:
Si tiene un dict d y quiere sus claves como filas:
Y otra forma de dar dict a un DataFrame:
fuente
Primero, los elementos dentro de una colección imprimen su repr. deberías aprender sobre
__repr__
y__str__
.Ésta es la diferencia entre print repr (1.1) e print 1.1. Unamos todas esas cadenas en lugar de las representaciones:
fuente
Me encontré con este problema al intentar usar pprint para generar una lista de tuplas de flotantes. Las comprensiones anidadas pueden ser una mala idea, pero esto es lo que hice:
Usé expresiones de generador al principio, pero pprint simplemente repred el generador ...
fuente
A partir de Python 3.6, puede usar f-strings:
Puede usar parámetros de impresión manteniendo el código muy legible:
fuente
Tuve este problema, pero ninguna de las soluciones aquí hizo exactamente lo que quería (quiero que la salida impresa sea una expresión de Python válida), entonces, ¿qué tal esto?
Uso:
(Sé que .format () se supone que es la solución más estándar, pero encuentro esto más legible)
fuente
Estoy de acuerdo con el comentario de SilentGhost, el bucle for no es tan malo. Puedes lograr lo que quieras con:
fuente
El siguiente código me funciona bien.
fuente