2017-10-16 10 views
0

J'ai actuellement une liste de valeurs numériques de type "chaîne". Certains des éléments de cette liste ont plus d'une valeur, par exemple:Conversion de chaînes dans une liste en flottants

AF=['0.056', '0.024, 0.0235', '0.724', '0.932, 0.226, 0.634']

L'autre chose est que certains des éléments pourraient être Cela étant dit .

, que je suis en essayant de convertir les éléments de cette liste en flotteurs (tout en conservant toujours le tuple s'il y a plus d'une valeur), mais je continue à obtenir l'erreur suivante:

ValueError: could not convert string to float: .

J'ai essayé beaucoup de choses à résoudre ce problème, avec le dernier étant:

for x in AF: 
    if "," in x: #if there are multiple values for one AF 
     elements= x.split(",") 
     for k in elements: #each element of the sub-list 
      if k != '.': 
       k= map(float, k) 
       print(k) #check to see if there are still "." 
      else: 
       pass 

Mais quand je cours, je reçois toujours la même erreur. Donc, j'ai imprimé k de la boucle ci-dessus et bien sûr, il y avait encore . dans la liste, en dépit de moi déclarant ne pas inclure ceux dans la conversion de chaîne à float.

Ceci est ma sortie désirée: AF=[0.056, [0.024, 0.0235], 0.724, [0.932, 0.226, 0.634]]

+0

Pouvez-vous montrer votre sortie désirée? – CoryKramer

+0

@CoryKramer: ajouté – claudiadast

+0

pour que l'élément autonome '.' soit supprimé? – RomanPerekhrest

Répondre

1
def convert(l): 
    new = [] 
    for line in l: 
     if ',' in line: 
      new.append([float(j) for j in line.split(',')]) 
     else: 
      try: 
       new.append(float(line)) 
      except ValueError: 
       pass 
    return new 

>>> convert(AF) 
[0.056, [0.024, 0.0235], 0.724, [0.932, 0.226, 0.634]] 
+0

Merci! Quand j'essaie cela, je reçois toujours '' 'Traceback (appel le plus récent en dernier): Fichier" VCF-to-hail-comparison.py ", ligne 320, en principal() Fichier" VCF-to-hail " -comparison.py ", ligne 112, dans convertir (AF) Fichier" VCF-to-hail-comparison.py ", ligne 19, dans la conversion new.append ([float (j) pour j dans la ligne. split (",")]) ValueError: impossible de convertir la chaîne en float: .''' – claudiadast

0

Si vous essayez ceci:

result = [] 
for item in AF: 
    if item != '.': 
     values = list(map(float, item.split(', '))) 
     result.append(values) 

Vous obtenez:

[[0.056], [0.024, 0.0235], [0.724], [0.932, 0.226, 0.634]] 

Vous pouvez simplifier en utilisant une liste de compréhension:

result = [list(map(float, item.split(', '))) 
      for item in AF 
      if item != '.'] 
0

Avec la fonction re.findall() (sur la liste d'entrée étendue):

import re 

AF = ['0.056', '0.024, 0.0235, .', '.', '0.724', '0.932, 0.226, 0.634', '.'] 
result = [] 

for s in AF: 
    items = re.findall(r'\b\d+\.\d+\b', s) 
    if items: 
     result.append(float(items[0]) if len(items) == 1 else list(map(float, items))) 

print(result) 

La sortie:

[0.056, [0.024, 0.0235], 0.724, [0.932, 0.226, 0.634]]