Недавно (наконец?) начал использовать .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) (ясно, если это возможно, я не используя правильный синтаксис), и если да, то как?