我已经阅读了很多与我的问题相关的类似问题,但我没有看到任何具体的问题。 我有一个对象列表,例如
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__方法,因此使用了对象的默认值。"并建议将其转换为字符串 - 这会导致相同的错误。
我的问题基本上是,有没有办法解决这个错误,或者更好的方法来获得输出而不切片/使用上面的方法?
谢谢,
答案 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]]
,我认为你不需要。