Verwenden Sie .format (), um eine Liste mit Feldbreitenargumenten zu formatieren
Ich habe vor kurzem (endlich?) Angefangen zu benutzen.format()
und habe eine vielleicht etwas dunkle frage dazu.
Gegeben
res = ['Irene Adler', 35, 24.798]
und
(1) print('{0[0]:10s} {0[1]:5d} {0[2]:.2f}'.format(res))
(2) print('{:{}s} {:{}d} {:{}f}'.format(res[0], 10, res[1], 5, res[2], .2))
funktioniert super und beide drucken:
Irene Adler 35 24.80
Irene Adler 35 24.80
Ich wusste nicht, dass ich mit Listen wie in (1) umgehen kann, was ordentlich ist. Ich hatte über Feldbreite Argumente (2) mit dem alten gesehen%
vorher formatieren.
Meine Frage ist, ob ich so etwas tun möchte, das (1) und (2) kombiniert:
(3) print('{0[0]:{}s} {0[1]:{}d} {0[2]:{}f}'.format(res, 10, 5, .2))
Dies ist mir jedoch nicht möglich, und ich konnte aus der Dokumentation nicht herausfinden, ob dies überhaupt möglich ist. Es wäre schön, nur die zu druckende Liste und die Argumente für width anzugeben.
Übrigens habe ich auch Folgendes ausprobiert (ohne Glück):
args = (10, 5, .2)
(4) print('{0[0]:{}s} {0[1]:{}d} {0[2]:{}f}'.format(res, args))
In beiden Fällen habe ich:
D:\Users\blabla\Desktop>python tmp.py
Traceback (most recent call last):
File "tmp.py", line 27, in <module>
print('{0[0]:{}s} {0[1]:{}d} {0[2]:{}f}'.format(res, 10, 5, .2))
ValueError: cannot switch from manual field specification to automatic field numbering
D:\Users\blabla\Desktop>python tmp.py
Traceback (most recent call last):
File "tmp.py", line 35, in <module>
print('{0[0]:{}s} {0[1]:{}d} {0[2]:{}f}'.format(res, args))
ValueError: cannot switch from manual field specification to automatic field numbering
Ich habe auch versucht mitzip()
die beiden Sequenzen ohne Glück zu kombinieren.
Meine Frage ist:
Kann ich in (3) und (4) eine Liste angeben, die effektiv gedruckt werden soll, und wenn ja, wie?