1. ホーム
  2. python

[解決済み] Python 3.6でf-stringで改行を使用して出力をフォーマットする方法は?

2022-04-14 10:49:32

質問

このケースをf-stringを使ってPythonicな方法でフォーマットする方法を知りたいです。

names = ['Adam', 'Bob', 'Cyril']
text = f"Winners are:\n{'\n'.join(names)}"
print(text)

問題は、その '\' の内部で使用することはできません。 {...} の表現部分と同じです。 期待される出力

Winners are:
Adam
Bob
Cyril

解決方法は?

できません。中括弧の中にバックスラッシュを入れることはできません {} その結果 SyntaxError :

>>> f'{\}'
SyntaxError: f-string expression part cannot include a backslash

で指定されています。 PEP をf-stringに変換します。

f-stringの式部分の中にバックスラッシュを入れることはできません[...]。

一つの方法として '\n' を名前に追加し .join の中で、その上に f -の文字列を、つまりリテラルを使用せずに作成します。

names = ['Adam', 'Bob', 'Cyril']
nl = '\n'
text = f"Winners are:{nl}{nl.join(names)}"
print(text)

結果が出る。

Winners are:
Adam
Bob
Cyril

もう一つの選択肢は、@wim が指定したように chr(10) を取得するために \n が返され、そこに結合します。 f"Winners are:\n{chr(10).join(names)}"

さらにもうひとつは、もちろん '\n'.join をあらかじめ入れておき、それに合わせて名前を付けます。

n = "\n".join(names)
text = f"Winners are:\n{n}"

となり、同じ出力になります。

との細かな違いの一つです。 f -文字列と str.format . 後者では、それらのキーを含む対応する wacky dict が解凍されることを条件に、常に句読点を使用することができます。

>>> "{\\} {*}".format(**{"\\": 'Hello', "*": 'World!'})
"Hello World!"

<サブ (こんなことしないでください)

前者では、句読点を使った識別子を持つことができないので、句読点は許されない。


余談:私なら絶対選ぶのは print または format 他の回答が示唆しているように、代替案として。私が挙げた選択肢は、以下の場合にのみ適用されます。 しなければならない は、何らかの理由でf-stringを使用しています。

新しいものだからといって、何でもかんでもそれでやろうというわけではありません ;-)