我有一个分数列表,例如:
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])
需要字符串或整数。
答案 0 :(得分:12)
import fractions
data = [float(fractions.Fraction(x)) for x in data]
或完全匹配您的示例(数据以字符串结尾):
import fractions
data = [str(float(fractions.Fraction(x))) for x in data]
答案 1 :(得分:2)
import fractions
data = [str(round(float(fractions.Fraction(x)), 2)) for x in data]
答案 2 :(得分: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)]
答案 3 :(得分: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.666666666666666663]
答案 4 :(得分:0)
data = [ x.split('/') for x in data ]
data = [ float(x[0]) / float(x[1]) for x in data ]
答案 5 :(得分: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']
答案 6 :(得分: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]