2010-08-26 19 views
7

J'ai une liste de fractions, telles que:liste Convertir des Fractions à flotteurs en Python

data = ['24/221 ', '25/221 ', '24/221 ', '25/221 ', '25/221 ', '30/221 ', '31/221 ', '31/221 ', '31/221 ', '31/221 ', '30/221 ', '30/221 ', '33/221 '] 

Comment pourrais-je aller sur la conversion de ceux-ci à des flotteurs, par exemple

data = ['0.10 ', '0.11 ', '0.10 ', '0.11 ', '0.13 ', '0.14 ', '0.14 ', '0.14 ', '0.14 ', '0.14 ', '0.13 ', '0.13 ', '0.15 '] 

Le module Fraction semble ne convertir en Fractions (pas de) et float([x]) nécessite une chaîne ou un entier.

+0

voulez-vous trunc mangé ou arrondi après la deuxième décimale? –

Répondre

11
import fractions 
data = [float(fractions.Fraction(x)) for x in data] 

ou pour correspondre à votre exemple exactement (données se termine par des chaînes):

import fractions 
data = [str(float(fractions.Fraction(x))) for x in data] 
0
def split_divide(elem): 
    (a,b) = [float(i) for i in elem.split('/')] 
    return a/b 

map(split_divide, ['1/2','2/3']) 

[0,5, ,66666666666666663]

1
import fractions 
data = [str(round(float(fractions.Fraction(x)), 2)) for x in data] 
0
data = [ x.split('/') for x in data ] 
data = [ float(x[0])/float(x[1]) for x in data ] 
0

liste emboîtée compréhensions sera obtenir votre réponse sans importer de modules supplémentaires (les fractions sont seulement en Python 2.6+).

>>> ['%.2f' % (float(numerator)/float(denomator)) for numerator, denomator in [element.split('/') for element in data]] 
['0.11', '0.11', '0.11', '0.11', '0.11', '0.14', '0.14', '0.14', '0.14', '0.14', '0.14', '0.14', '0.15'] 
+1

Les fractions sont en 2.6. – carl

+0

Oups! Tu as raison. Ma faute. –

1

Utilisation du module de fraction est agréable et bien rangé, mais il est assez lourd (plus lent) par rapport à scission de chaîne simple ou une partition

Cette compréhension de liste crée les flotteurs comme la réponse avec le plus de votes ne

[(n/d) for n,d in (map(float, i.split("/")) for i in data)] 

Si vous voulez que les deux chaînes de décimales

["%.2f"%(n/d) for n,d in (map(float, i.split("/")) for i in data)]