私は最近(ついに?)使い始めました.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()
、運が悪かったので、2つのシーケンスを組み合わせてみました。
私の質問は:
(3)と(4)で失敗したことを効果的に実行するためにリストを指定できますか(これが可能であれば、正しい構文を使用していません)、その場合はどうすればよいですか?