2017-07-12 6 views
1

Ich habe eine Liste von Strings (CD_cent) wie folgt aus:ValueError: Konnte String nicht in Fließkomma konvertieren: '.'

2.374 2.559 1.204 

und ich möchte diese Zahlen mit einem Float-Zahl multiplizieren. Dazu versuche ich die Liste der Strings auf eine Liste von Schwimmern zum Beispiel zu konvertieren mit:

CD_cent2=[float(x) for x in CD_cent] 

Aber ich bekomme immer die Fehlermeldung: ValueError: could not convert string to float: '.'. Ich denke, das bedeutet, dass es den Punkt nicht in einen Float (?!) Umwandeln kann. Aber wie könnte ich das beheben? Warum erkennt es den Punkt nicht?

+1

split 'CD_cent ==„2,374 2,559 1,204“'? Wenn ja, wird 'für x in CD_cent' über die Zeichen iterieren, dh,' x = 2', 'x = '.'',' x = 3' usw. Deshalb beschwert es sich, weil ''. 'kann nicht in Float umgewandelt werden. – darksky

+0

ja der Befehl 'print (CD_cent)' gibt mir ''2.374 2.559 1.204'' – Leo

+0

oh ok ... also hast du eine Idee, wie ich das beheben könnte? – Leo

Antwort

7

Sie müssen split jede Zeichenfolge als Zeichenfolge hat mehrere Werte:

your_str = "2.374 2.559 1.204" 

floats = [float(x) for x in your_str.split(' ')] 

eine Liste Nachdem Sie so etwas tun kann:

li = [...] 
floats = [] 

for s in li: 
    floats.extend([float(x) for x in s.split(' ')]) 

In Ihre genaue Situation, die Sie einen einzelnen String haben CD_cent = 2.374 2.559 1.204, so können Sie einfach:

floats = [float(x) for x in CD_cent.split(' ')] 
+0

Dies ist der richtige Weg. Aber ich würde 'str.split (" ")' explizit hinzufügen, um klar zu machen, wie die Zeichenfolge aufgeteilt werden soll. – darksky

+0

@darksky, ja, sicher, vergessen, '' '' hinzuzufügen. Die Antwort wurde aktualisiert. Danke – pythad

+0

Oder auch nur 'split()' ohne Argumente, so dass dies mit jeder Art von Leerzeichenbegrenzer funktioniert –

0

Als ich lief Ihre Zeile mit den bereitgestellten Daten alles hat gut funktioniert und alle Zeichenfolgen umgewandelt, um ohne Fehler floats. Der Fehler zeigt an, dass irgendwo in Ihrem CD_cent ein einziger DOT . ist, der wirklich nicht in Float umgewandelt werden kann.

Um zu versuchen, dies zu tun zu lösen:

CD_cent2=[float(x) for x in CD_cent if x != '.'] 

Und wenn das nicht wegen anderer Strings funktioniert Sie try...except wie diese haben:

CD_cent2 = [] 
for x in CD_cent: 
    try: 
     CD_cent2.append(float(x)) 
    except ValueError: 
     pass 

All das, weil ich ist angenommen, CD_cent ist nicht nur eine lange Zeichenfolge wie '2.374 2.559 1.204', aber es ist eine Liste wie [2.374,2.559,1.204]. Wenn das nicht als dies der Fall sollten Sie die Zeile wie dieses ist

CD_cent2=[float(x) for x in CD_cent.split()] 
Verwandte Themen