Sankar A
Tengo una lista de python con cadenas en este formato:
A1 = [' "29.0" ',' "65.2" ',' "75.2" ']
¿Cómo convierto esas cadenas en números decimales para realizar operaciones aritméticas en los elementos de la lista?
marca byers
Si desea que el resultado sea el número de punto flotante binario más cercano, use float
:
result = [float(x.strip(' "')) for x in A1]
Si desea que el resultado se almacene exactamente, use Decimal
en vez de float
:
from decimal import Decimal
result = [Decimal(x.strip(' "')) for x in A1]
-
Probé esto y me di cuenta de que no funciona porque las cadenas tienen espacios en blanco y comillas adicionales.
– jake
10 de enero de 2011 a las 5:46
Nids Barthwal
Si está convirtiendo el precio (en cadena) a precio decimal, entonces…
from decimal import Decimal
price = "14000,45"
price_in_decimal = Decimal(price.replace(',','.'))
No es necesario reemplazar si sus cadenas ya usan puntos como separador decimal
-
¿Este método no pierde los últimos 2 lugares decimales, lo que da como resultado un número mayor?
– tehfink
5 de agosto de 2018 a las 15:32
-
price_in_decimal = Decimal(price.replace(',','.'))
Esto es lo que @Nids pretendía, supongo. Reemplazando el , con .– corredor libre
17 de septiembre de 2018 a las 9:51
-
@freerunner exactamente!
– Víctor
8 de marzo de 2020 a las 7:14
Tendrás que usar strip()
debido a los bits adicionales en las cadenas.
A2 = [float(x.strip('"')) for x in A1]
-
También debe eliminar el espacio adicional.
– DSM
10 de enero de 2011 a las 5:47
-
¿Probado con un cortar y pegar del ejemplo del OP? No funcionó como está.
–Mark Tolonen
10 de enero de 2011 a las 6:47
-
@Mark, no tengo idea de qué hice de manera diferente ayer, pero ahora no funciona. Quizás la pregunta ha sido editada desde que la copié.
– jake
10 de enero de 2011 a las 22:05
use la función float() incorporada en una lista de comprensión.
A2 = [float(v.replace('"','').strip()) for v in A1]
En Python hay dos tipos de datos de punto flotante Float
y Decimal
. El caso de uso depende de la precisión del decimal que desee en su programa. Float
es rápido y Decimal
es preciso
Para convertir una cadena en un número de coma flotante, simplemente haga
import decimal
float('1.2')
decimal.Decimal('1.2')
analizando Float
y Decimal
objetos
>>> import sys
>>> from decimal import Decimal
>>> num = '1.2'
>>> float(num)
1.2
>>> Decimal(num)
Decimal('1.2')
>>> # Precision
>>> float(1.2)
1.2
>>> Decimal(1.2)
Decimal('1.1999999999999999555910790149937383830547332763671875')
>>> # Memory usage
>>> sys.getsizeof(Decimal(num))
104
>>> sys.getsizeof(float(num))
24
>>> # Performance
>>> %timeit float(num)
140 ns ± 2.27 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
>>> %timeit Decimal(num)
192 ns ± 9.42 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
En su caso particular, puede usar la solución @Mark Byers.
teknolagi
A2 = [float(x.strip('"')) for x in A1]
funciona, @Jake, pero hay ceros innecesarios
ruhul amin
Hay dos tipos de datos de coma flotante. Float
y Decimal
. Depende de la demanda de su programa cuál desea utilizar. Decimal
proporciona un alto nivel de precisión y es más preciso que Float
.
Para convertir una cadena de valor en flotante, simplemente hágalo:
num = "29.0"
print (float(num))
Para convertir cadenas a decimales
from decimal import Decimal
num = "29.0"
print (Decimal(num))
Para su pregunta específica, puede usar el siguiente código. Ambos están trabajando para mí.
from decimal import Decimal
import re
result = [float(x.strip(' "')) for x in A1]
print(result)
#[29.0, 65.2, 75.2]
result = [Decimal(x.strip(' "')) for x in A1]
print(result)
#[Decimal('29.0'), Decimal('65.2'), Decimal('75.2')]
result = [float(re.search(r'\d+.\d+',number).group()) for number in A1]
print(result)
#[29.0, 65.2, 75.2]
result = [Decimal(re.search(r'\d+.\d+',number).group()) for number in A1]
print(result)
#[Decimal('29.0'), Decimal('65.2'), Decimal('75.2')]