簡體   English   中英

在Python中將Fractions列表轉換為浮點數

[英]Convert list of Fractions to floats in 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 (而不是from),而float([x])需要一個字符串或整數。

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

或者完全匹配你的例子(數據以字符串結尾):

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

使用分數模塊很好而且整潔,但與簡單的字符串拆分或分區相比,它相當重量級(較慢)

這個列表理解創建了浮點數作為得票最多的答案

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

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

嵌套列表推導將為您提供答案,而無需導入額外的模塊(分數僅在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']

在我看來,所有以前的答案都過於復雜。 執行此操作以及執行大量其他轉換的最簡單方法是使用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 as

[0.5,0.75,0.875]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM