Usando .format () para formatar uma lista com argumentos de largura de campo
Eu recentemente (finalmente?) Comecei a usar.format()
e ter uma pergunta talvez um pouco obscura sobre isso.
Dado
res = ['Irene Adler', 35, 24.798]
e
(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))
trabalhe bem e ambos imprimam:
Irene Adler 35 24.80
Irene Adler 35 24.80
Eu não sabia que eu poderia lidar com listas como em (1) que é legal. Eu tinha visto sobre argumentos de largura de campo (2) com o antigo%
formatação antes.
Minha pergunta é sobre querer fazer algo assim que combina (1) e (2):
(3) print('{0[0]:{}s} {0[1]:{}d} {0[2]:{}f}'.format(res, 10, 5, .2))
No entanto, não consigo fazer isso e não consegui descobrir na documentação se isso é possível. Seria bom apenas fornecer a lista a ser impressa e os argumentos para largura.
A propósito, eu também tentei isso (sem sorte):
args = (10, 5, .2)
(4) print('{0[0]:{}s} {0[1]:{}d} {0[2]:{}f}'.format(res, args))
Em ambos os casos, recebi:
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
Eu também tentei usarzip()
combinar as duas seqüências sem sorte.
Minha pergunta é:
Posso especificar uma lista para ser impressa efetivamente fazendo o que eu estava tentando fazer sem sucesso em (3) e (4) (claramente, se isso é possível, eu não estou usando a sintaxe certa) e em caso afirmativo, como?