2017-07-12 6 views
1

J'ai une liste de chaînes (CD_cent) comme ceci:ValueError: impossible de convertir la chaîne en float: '.'

2.374 2.559 1.204 

et je veux multiplier ces chiffres avec un nombre flottant. Pour cela, j'essaie de convertir la liste des chaînes à une liste de flotteurs par exemple avec:

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

Mais je reçois toujours l'erreur: ValueError: could not convert string to float: '.'. Je suppose que cela signifie, qu'il ne peut pas convertir le point à un flotteur (?!) Mais comment pourrais-je résoudre ce problème? Pourquoi ne reconnaît-il pas le point?

+1

Est-ce que 'CD_cent ==" 2.374 2.559 1.204 "'? Si c'est le cas, 'pour x dans CD_cent' va parcourir les caractères, c'est-à-dire' x = 2', 'x = '.'',' x = 3', etc. C'est pourquoi il se plaint, parce que ''. ' 'ne peut pas être converti en float. – darksky

+0

oui la commande 'print (CD_cent)' me donne '' 2.374 2.559 1.204'' – Leo

+0

oh ok ... alors avez-vous une idée de comment je pourrais résoudre ce problème? – Leo

Répondre

7

Vous devez split chaque chaîne que la chaîne a plusieurs valeurs:

your_str = "2.374 2.559 1.204" 

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

Avoir une liste que vous pouvez faire quelque chose comme ceci:

li = [...] 
floats = [] 

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

Dans votre situation exacte que vous avez une seule chaîne CD_cent = 2.374 2.559 1.204, de sorte que vous pouvez simplement:

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

C'est la bonne façon de le faire. Mais j'ajouterais explicitement 'str.split (" ")' pour indiquer clairement comment la chaîne devrait être scindée. – darksky

+0

@darksky, oui, bien sûr, j'ai oublié d'ajouter ''' '. Mise à jour de la réponse Merci – pythad

+0

Ou même juste 'split()' sans aucun argument, de sorte que cela fonctionne avec n'importe quel type de délimiteur d'espaces –

0

Quand je a couru votre ligne avec les données fournies tout a bien fonctionné et toutes les chaînes converties en flotteurs sans erreur. L'erreur indique que quelque part dans votre CD_cent il y a un seul DOT . qui ne peut vraiment pas être converti en flottant.

Pour tenter de résoudre ce faire:

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

Et si cela ne fonctionne pas à cause d'autres chaînes vous devrez try...except comme ceci:

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

Tout cela est parce que je supposons CD_cent n'est pas juste une longue chaîne comme '2.374 2.559 1.204' mais c'est une liste comme [2.374,2.559,1.204]. Si ce n'est pas le cas, vous devriez split la ligne comme ceci

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