2010-08-26 16 views
7

Ich habe eine Liste von Fraktionen, wie zB:Convert Liste der Fraktionen in Python schwimmt

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 '] 

Wie würde ich mich über diesen Schwimmer Umwandlung, z.B.

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 '] 

Fraction Das Modul scheint nur Fractions (nicht ab) und float([x]) erfordert einen String oder Integer zu konvertieren.

+0

Haben Sie trunc wollen gegessen oder rund nach der zweiten Dezimalzahl? –

Antwort

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

oder genau Ihrem Beispiel entsprechen (Daten endet mit Streichern nach oben):

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

Nested Listenkomprehensionen wird erhalten Sie Ihre Antwort, ohne zusätzliche Module zu importieren (Fraktionen ist nur in 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

Fraktionen ist in 2.6. – carl

+0

Hoppla! Du hast recht. Mein Fehler. –

1

den Anteil Modul zu verwenden ist schön und sauber, aber recht Schwergewicht (langsamer) im Vergleich zu einfachem String-Split oder Partition

Diese Liste Verständnis des Schwimmer als die Antwort mit den meisten Stimmen tut

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

Wenn Sie die beiden Nachkommastelle Strings wollen

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