格式化python

时间:2017-04-11 16:54:07

标签: python list python-3.x

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

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

切片工作,只给我数字,但当我到达print语句时出现错误

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

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

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

谢谢,

3 个答案:

答案 0 :(得分: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']

答案 1 :(得分:1)

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

print提供格式化值的列表解析,您可以将其解压缩并作为位置提供:

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

现在打印出来:

numbers:  0.50000 0.75000 0.95437

答案 2 :(得分:-1)

尝试:

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

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