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?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage