2017-04-11 76 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位 –