【问题标题】:Formatting lists of objects in python在python中格式化对象列表
【发布时间】:2017-04-11 16:54:07
【问题描述】:

我已经阅读了很多与我的问题相关的类似问题,但我没有看到任何专门针对此的问题。 我有一个对象列表,例如

l = ((a, 0.5), (b, 0.75), (c, 0.954367))

我希望能够只打印出数字,格式为小数点后 5 位。我不太清楚该怎么做,所以我开始尝试切片然后打印它

nums = list(z[1:2] for z in l)    # originally had 'tuple' instead of 'list'
print("numbers: {:.5f}".format(nums))

切片有效,只给我数字,但是当我到达打印语句时,我得到一个错误

TypeError: non-empty format string passed to object.__format__

我最初将切片作为元组进行,但认为这可能导致错误,因此将其更改为列表,但没有帮助。 我读过noted that 的一个答案@“字节对象没有自己的 _ _format__ 方法,因此使用来自对象的默认值。”并建议将其转换为字符串 - 这导致了同样的错误。

我的问题本质上是,有没有办法解决这个错误,或者有更好的方法来获得输出而不切片/使用上面的方法?

谢谢,

【问题讨论】:

    标签: python list python-3.x


    【解决方案1】:

    使用简单的列表理解。

    >>> l = (('a', 0.5), ('b', 0.75), ('c', 0.954367))
    >>> ["{:.5f}".format(i[1]) for i in l]
    [ '0.50000', '0.75000', '0.95437']
    

    【讨论】:

      【解决方案2】:

      您正在尝试将float 表示类型'f' 与列表对象一起使用。这就是失败的原因。

      print 提供格式化值的列表理解,您可以将其解包并作为位置信息提供:

      print("numbers: ", *["{0[0]:.5f}".format(i) for i in nums])
      

      现在打印出来了:

      numbers:  0.50000 0.75000 0.95437
      

      【讨论】:

        【解决方案3】:

        尝试:

        nums = list(z[1] for z in l)
        

        z[1:2] 本质上给出了另一个数字列表:[[0.5],[0.75],[0.954367]],我认为您不需要。

        【讨论】:

        • 此答案未解决小数点后 5 位格式约束。
        • 这个答案是针对第一行的,第二行已经处理了小数点后 5 位
        猜你喜欢
        • 2013-01-16
        • 2015-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多