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])需要一个字符串或整数。

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

如果你想要两个小数位字符串

["%.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.66666666666666663]

于 2010-08-26T19:16:41.723 回答
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 回答
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

在我看来,所有以前的答案都过于复杂。执行此操作以及进行许多其他转换的最简单方法是使用 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]

于 2019-05-17T20:43:59.570 回答