2011-01-10 19 views
16

Ich habe eine Python-Liste mit Strings in diesem Format:Python: string Konvertierung in Dezimalzahl

A1 = [' "29.0" ',' "65.2" ',' "75.2" '] 

Wie konvertiere ich diese Zeichenfolge in Dezimalzahlen arithmetische Operationen auf den Listenelementen durchführen?

Antwort

42

Wenn Sie das Ergebnis als die nächste binäre Gleitpunktzahl Verwendung float:

result = [float(x.strip(' "')) for x in A1] 

Wenn Sie das Ergebnis genau Decimal verwenden gespeichert statt float:

from decimal import Decimal 
result = [Decimal(x.strip(' "')) for x in A1] 
+0

Getestet dies und erkannte, dass es nicht funktioniert ot Arbeit, weil die Zeichenketten Whitespace und zusätzliche Anführungszeichen in ihnen haben. – Jake

+0

Danke, behoben. Übrigens, auch deine muss korrigiert werden. –

+0

Getestet, funktioniert wie es ist. – Jake

2

Sie müssen Verwenden Sie strip() wegen der zusätzlichen Bits in den Strings.

A2 = [float(x.strip('"')) for x in A1] 
+4

Sie müssen den zusätzlichen Platz auch strippen. – DSM

+0

Getestet wie es ist und es funktioniert. – Jake

+2

Getestet mit einem Ausschneiden und Einfügen des Beispiels des OP? Es funktionierte nicht so wie es ist. –

3

Verwenden Sie die integrierte Funktion float() in einem Listenverständnis.

A2 = [float(v.replace('"','').strip()) for v in A1]

1

A2 = [float(x.strip('"')) for x in A1] Werke, @Jake, aber es gibt nicht notwendig 0s

+2

Funktioniert nicht mit dem _exact_-Beispiel von OP. Nullen sind nicht "unnötig". 'float' kann nicht alle Dezimalstellen genau in binär darstellen. Aber siehe Mark Byers Antwort. –

+0

danke für die heads-up – tekknolagi

0

Wenn Sie dann Preis (in string) zu dezimal Preis konvertieren ....

from decimal import Decimal 

price = "14000,45" 
price_in_decimal = Decimal(price.replace(',','')) 
0

Wenn Sie Konvertieren von String in Float:

import re 
A1 = [' "29.0" ',' "65.2" ',' "75.2" '] 
float_values = [float(re.search(r'\d+.\d+',number).group()) for number in A1] 
print(float_values) 
>>> [29.0, 65.2, 75.2]