2017-04-11 73 views
0

我已经阅读了很多与我的问题相关的类似问题,但我没有看到任何具体的问题。 我有对象的列表,如在python中格式化对象列表

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__方法,所以使用默认的对象。”并建议将其转换为一个字符串 - 而这会导致相同的错误。

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

谢谢

回答

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'] 
0

你试图使用float演示文稿类型,'f',有一个列表对象。这是失败的原因。

供应print与格式化值列表理解,你可以打开包装,并提供尽可能positionals:

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

这就是现在打印出:

numbers: 0.50000 0.75000 0.95437 
-1

尝试:

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

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

+0

此答案未解决小数点后5位的格式约束。 – vincentmajor

+0

这个答案是第一行,有问题的第二行已经照顾小数点后5位 –