Преобразование списка дробей в числа с плавающей запятой в 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]) требует строки или целого числа.

8
задан mskfisher 14 May 2012 в 15:07
поделиться

6 ответов

import fractions
data = [str(round(float(fractions.Fraction(x)), 2)) for x in data]
2
ответ дан 5 December 2019 в 10:37
поделиться
data = [ x.split('/') for x in data ]
data = [ float(x[0]) / float(x[1]) for x in data ]
0
ответ дан 5 December 2019 в 10:37
поделиться

Вложенные списки помогут вам получить ответ без импорта дополнительных модулей (фракции есть только в 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
ответ дан 5 December 2019 в 10:37
поделиться
import fractions
data = [float(fractions.Fraction(x)) for x in data]

или чтобы точно соответствовать вашему примеру (данные заканчиваются строками):

import fractions
data = [str(float(fractions.Fraction(x))) for x in data]
13
ответ дан 5 December 2019 в 10:37
поделиться

Использование модуля Fraction красиво и аккуратно, но довольно тяжеловесно (медленнее). ) по сравнению с простым разделением или разделением строк

Это понимание списка создает числа с плавающей запятой, как это делает ответ с наибольшим количеством голосов

[(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)]
1
ответ дан 5 December 2019 в 10:37
поделиться
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
ответ дан 5 December 2019 в 10:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: