2011-03-16 8 views
23

Tengo una lista que consta de valores flotantes pero son demasiado detallados para proceder. Sé que podemos acortar mediante el uso del operador ("% .f" % variable) como:¿Cómo redondear cada artículo en una lista de carrozas a 2 decimales?

result = [359.70000000000005] 
result = "%.2f" % result 
result = [359.70] 

Mi pregunta es ¿cómo podemos convertir una lista de valores sin necesidad de utilizar un iterador.

list = [0.30000000000000004, 0.5, 0.20000000000000001] 
list = "%.2f" % list 
TypeError: not all arguments converted during string formatting 

¿Cómo puedo proporcionar una lista limpia como:

list = [0.30, 0.5, 0.20] 

Puede ser una pregunta tonta ya que estoy recién empecé Python. Lo siento por eso ...

+2

Grave confusión de conceptos aquí. Por ejemplo '0.2' y' 0.20000000000000001' son representaciones del * mismo * número de coma flotante de doble precisión. Simplemente inicie su intérprete e ingrese '0.2' para ver esto. –

Respuesta

40

"%.2f" no devuelve limpia flotador. Devuelve una cadena que representa este flotante con dos decimales.

myList = [0.30000000000000004, 0.5, 0.20000000000000001] 
myFormattedList = [ '%.2f' % elem for elem in myList ] 

devuelve:

['0.30', '0.50', '0.20'] 

Además, no llame a la variable de list. Esta es una palabra reservada para la creación de listas. Use otro nombre, por ejemplo myList.

Si desea obtener [0.30, 0.5, 0.20] (o al menos los flotadores que son lo más cerca posible), se puede intentar esto:

myRoundedList = [ round(elem, 2) for elem in myList ] 

rendimientos:

[0.29999999999999999, 0.5, 0.20000000000000001] 
+0

Gracias, eumiro. Solo usé "lista" para una explicación. – Fish

+6

Incluso mejor que 'myList' sería' my_list' para cumplir con PEP 8. –

+1

"Si desea obtener [0.30, 0.5, 0.20], intente esto: myRoundedList = [round (elem, 2) for elem in myList] devuelve [0.29999999999999999, 0.5, 0.20000000000000001] ". Por lo tanto, este código no obtiene lo que quiere obtener (que también dejó en claro [0.30, 0.5, 0.20], solo flotan dos puntos decimales). – darksky

10

Es posible que desee ver El módulo decimal de Python, que puede hacer que usar números en coma flotante y hacer aritmética con ellos sea mucho más intuitivo. Aquí hay un ejemplo trivial de una forma de usarlo para "limpiar" los valores de su lista:

>>> from decimal import * 
>>> mylist = [0.30000000000000004, 0.5, 0.20000000000000001] 
>>> getcontext().prec = 2 
>>> ["%.2f" % e for e in mylist] 
['0.30', '0.50', '0.20'] 
>>> [Decimal("%.2f" % e) for e in mylist] 
[Decimal('0.30'), Decimal('0.50'), Decimal('0.20')] 
>>> data = [float(Decimal("%.2f" % e)) for e in mylist] 
>>> data 
[0.3, 0.5, 0.2]