Używanie .format () do formatowania listy z argumentami szerokości pola
Niedawno (w końcu?) Zaczęłam używać.format()
i mieć może nieco niejasne pytanie na ten temat.
Dany
res = ['Irene Adler', 35, 24.798]
i
(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))
działa świetnie i oba drukują:
Irene Adler 35 24.80
Irene Adler 35 24.80
Nie wiedziałem, że mogę poradzić sobie z listami jak w (1), która jest czysta. Widziałem o argumentach szerokości pola (2) ze starym%
formatowanie wcześniej.
Moje pytanie dotyczy chęci zrobienia czegoś takiego, które łączy (1) i (2):
(3) print('{0[0]:{}s} {0[1]:{}d} {0[2]:{}f}'.format(res, 10, 5, .2))
Nie jestem jednak w stanie tego zrobić i nie udało mi się znaleźć w dokumentacji, jeśli to możliwe. Miło byłoby po prostu podać listę do wydrukowania i argumenty dotyczące szerokości.
Przy okazji, spróbowałem tego (bez szczęścia):
args = (10, 5, .2)
(4) print('{0[0]:{}s} {0[1]:{}d} {0[2]:{}f}'.format(res, args))
W obu przypadkach dostałem:
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
Próbowałem też użyćzip()
połączyć dwie sekwencje bez szczęścia.
Moje pytanie brzmi:
Czy mogę określić listę, która ma być drukowana efektywnie, robiąc to, co próbowałem bezskutecznie w (3) i (4) (wyraźnie, jeśli to możliwe, nie używam właściwej składni), a jeśli tak, to w jaki sposób?