Использование .format() для форматирования списка с аргументами ширины поля

Я недавно (наконец-то?) начал использовать .format()и есть, возможно, немного неясный вопрос об этом.

Учитывая, что

res = ['Irene Adler', 35,  24.798]

и

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

отлично работают, и оба печатают:

Irene Adler    35 24.80
Irene Adler    35 24.80

Я не знал, что могу работать со списками, как в (1), что очень удобно. я раньше видел аргументы ширины поля (2) со старым форматированием %.

Мой вопрос о желании сделать что-то вроде этого, которое сочетает в себе (1) и (2):

(3) print('{0[0]:{}s} {0[1]:{}d} {0[2]:{}f}'.format(res, 10, 5, .2))

Однако я не могу этого сделать, и я не смог понять из документации, если это вообще возможно. Было бы неплохо просто укажите список для печати и аргументы ширины.

Между прочим, я также пробовал это (без везения):

args = (10, 5, .2)
(4) print('{0[0]:{}s} {0[1]:{}d} {0[2]:{}f}'.format(res, args))

В обоих случаях я получил:

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

Я также пытался использовать zip()для объединения двух последовательностей, но безуспешно. .

Мой вопрос:

Могу ли я указать список, который будет напечатан эффективно, выполняя то, что я пытался неудачно сделать в (3) и (4) (ясно, если это возможно, я не используется правильный синтаксис) и если да, то как?

47
задан Levon 10 September 2014 в 21:50
поделиться