9

次のような分数のリストがあります。

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

これらをフロートに変換するにはどうすればよいですか?

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に変換するだけのようで、文字列または整数が必要です。Fractionsfloat([x])

4

7 に答える 7

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

またはあなたの例と正確に一致させるために(データは文字列で終わります):

import fractions
data = [str(float(fractions.Fraction(x))) for x in data]
于 2010-08-26T19:13:51.270 に答える
2
import fractions
data = [str(round(float(fractions.Fraction(x)), 2)) for x in data]
于 2010-08-26T19:19:55.167 に答える
1

分数モジュールの使用は素晴らしく整頓されていますが、単純な文字列の分割またはパーティションに比べてかなり重い(遅い)です

このリスト内包表記は、投票数が最も多い回答と同じようにフロートを作成します

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

小数点以下2桁の文字列が必要な場合

["%.2f"%(n/d) for n,d in (map(float, i.split("/")) for i in data)]
于 2010-08-27T02:23:11.057 に答える
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, 0.6666666666666663]

于 2010-08-26T19:16:41.723 に答える
0

ネストされたリスト内包表記により、追加のモジュールをインポートせずに答えが得られます (分数は 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']
于 2010-08-26T19:53:33.080 に答える
0
data = [ x.split('/') for x in data ]
data = [ float(x[0]) / float(x[1]) for x in data ]
于 2010-08-26T19:20:14.133 に答える