【问题标题】:Convert list of Fractions to floats in Python在 Python 中将分数列表转换为浮点数
【发布时间】:2011-04-04 11:05:35
【问题描述】:

我有一个分数列表,例如:

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

【问题讨论】:

  • 小数点后第二位是截断还是舍入?

标签: python floating-point fractions


【解决方案1】:

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

【讨论】:

    【解决方案2】:
    data = [ x.split('/') for x in data ]
    data = [ float(x[0]) / float(x[1]) for x in data ]
    

    【讨论】:

      【解决方案3】:

      嵌套列表推导式无需导入额外模块即可为您提供答案(分数仅适用于 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']
      

      【讨论】:

        【解决方案4】:

        使用分数模块非常简洁,但与简单的字符串拆分或分区相比,它相当重量级(速度较慢)

        这个列表推导式创建浮点数,就像得票最多的答案一样

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

        【讨论】:

          【解决方案5】:
          import fractions
          data = [str(round(float(fractions.Fraction(x)), 2)) for x in data]
          

          【讨论】:

            【解决方案6】:
            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]

            【讨论】:

              【解决方案7】:
              import fractions
              data = [float(fractions.Fraction(x)) for x in data]
              

              或完全匹配您的示例(数据以字符串结尾):

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

              【讨论】:

                猜你喜欢
                • 2017-12-14
                • 2017-10-14
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2013-10-20
                • 2019-01-10
                • 2016-01-12
                • 2018-09-25
                相关资源
                最近更新 更多