在Python中将分数列表转换为浮点数

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 模块似乎只能将数据转换为 Fractions(不能从中转换),而 float([x]) 需要一个字符串或整数。


你想在第二位小数后截断还是四舍五入? - Tim Pietzcker
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]

2
import fractions
data = [str(round(float(fractions.Fraction(x)), 2)) for x in data]

1
使用分数模块很整洁,但与简单的字符串拆分或分区相比,它相当沉重(较慢)。
此列表推导式将浮点数创建为具有最多投票的答案。
[(n/d) for n,d in (map(float, i.split("/")) for i in data)]

如果您想要保留两位小数的字符串
["%.2f"%(n/d) for n,d in (map(float, i.split("/")) for i 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,0.66666666666666663]


0
data = [ x.split('/') for x in data ]
data = [ float(x[0]) / float(x[1]) for x in data ]

0
嵌套列表推导式可以让你得到答案,而无需导入额外的模块(fractions仅适用于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']

0
所有之前的答案对我来说似乎都过于复杂了。最简单的方法,以及进行许多其他转换的方法,是使用eval()。
以下是一种方法。
l=['1/2', '3/5', '7/8']
m=[]
for i in l
   j=eval(i)
   m.append(j)

上述的列表推导式版本是另一种方法。
m= [eval(i) for i in l] 

每个方法的结果为 m:

[0.5, 0.75, 0.875]


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接