2017-04-11 6 views
0

Ich habe viele ähnliche Fragen im Zusammenhang mit meiner Frage gelesen, aber ich habe keine speziell dafür gesehen. Ich habe eine Liste von Objekten, wie zum BeispielFormatieren von Listen von Objekten in Python

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

Ich möchte die Zahlen nur in der Lage sein ausdrucken, formatiert bis zu 5 Dezimalstellen. Ich war nicht sicher, wie um dies zu realisieren, also fing ich an, indem Sie versuchen, es zu schneiden und es dann drucken, wie solche

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

Aufschneiden Werke, mir geben nur die Zahlen, aber wenn ich an die print-Anweisung erhalten ich erhalte einen Fehler

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

ich hatte ursprünglich das Aufschneiden als Tupel getan werden, aber dachte, dass das verursacht haben mag der Fehler es so geändert eine Liste, die nicht geholfen haben. Eine Antwort Ich lese noted that "Bytes Objekte haben keine eigene _ _format__ Methode, so dass der Standard von Objekt verwendet wird." und schlug vor, es stattdessen in eine Zeichenfolge zu konvertieren - was zu dem gleichen Fehler führte.

Meine Frage im Wesentlichen, gibt es eine Möglichkeit, diesen Fehler zu beheben, oder eine bessere Möglichkeit, um die Ausgabe ohne Slicing/mit der oben genannten Methode zu erhalten?

Vielen Dank,

Antwort

1

Verwenden Sie einfaches Listenverständnis.

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

Sie versuchen, eine float Darstellungsweise zu verwenden, 'f', mit einem Listenobjekt. Das ist die Ursache für den Fehler.

Versorgung print mit einer Liste Verständnis der formatierten Werte, die Sie als positionals auspacken und zur Verfügung stellen kann:

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

ausdruckt Das jetzt:

numbers: 0.50000 0.75000 0.95437 
-1

Versuch:

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

z [1: 2] gibt im Wesentlichen eine andere Liste von Zahlen: [[0.5],[0.75],[0.954367]], was ich glaube nicht, dass du es brauchst.

+0

Diese Antwort adressiert nicht die Formatierungseinschränkung für 5 Dezimalstellen. – vincentmajor

+0

Diese Antwort war für die erste Zeile, die zweite Zeile in Frage war bereits für 5 Dezimalpunkt –