2010-08-26 55 views
7

彩车我有分数的列表,如:转换列表在Python

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

你想TRUNC在第二个小数点后吃饭或回合? – 2010-08-26 19:17:02

回答

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

或完全匹配的示例(数据用串结束):

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,0.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

嵌套列表解析将让你的答案无需导入额外的模块(分数是只在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

分数在2.6。 – carl 2010-08-26 20:30:17

+0

糟糕!你是对的。我的错。 – 2010-08-27 03:20:41

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