HOWTO · Python
Python で間にスペースを入れずに値を出力する
Python で値の間にスペースを入れずに出力する方法を学びます。print() の sep パラメーター、f 文字列、str.format()、% 書式、連結、文字列 Template の置換を使用します。
このページの内容
複数の引数をカンマで区切って print() 関数に渡すと、print() はデフォルトでそれらをスペースで結合します。そのため、値の間に不要なスペースが生じることがあります。幸い、Python にはこの間隔を正確に制御できる代替手段がいくつか用意されています。
このガイドでは、Python で値の間にスペースを入れずに出力するさまざまな方法を学びます。すべての方法は、以下のカンマ形式から始まる同じ通し例で示します。
x = 10
print('The number of mangoes I have is "', x, '"')
出力:
The number of mangoes I have is " 10 "
数値 10 とそれを囲む二重引用符の間の不要なスペースに注目してください。各カンマから 1 つずつ生じています。以下のすべての方法の目的は、同じ値を出力しながら、この過剰な間隔を取り除くことです。
モジュロ % 記号による文字列書式を使用して、Python で値の間にスペースを入れずに出力する
% 記号は、文字列書式または補間演算子とも呼ばれ、Python で最も古い書式方法です。文字列内の %d のようなプレースホルダーは値が入る場所を示し、% 演算子の後の値がそれを置換するため、どこにも区切り文字が追加されません。
x = 10
print('The number of mangoes I have is "%d"' % x)
出力:
The number of mangoes I have is "10"
ここで、%d は整数用のプレースホルダーです。文字列が構築されると、それは x の値である 10 に置換され、出力されたテキストは引用符に直接接します。このスタイルは Python 3 でも機能しますが、新しいコードでは通常 str.format() または f 文字列が好まれます。
str.format() 関数による文字列書式を使用して、Python で値の間にスペースを入れずに出力する
str.format() では、文字列内の波括弧 {} が値が置換される場所を示します。このメソッドは Python 3 で導入され、複雑な書式を効率的に処理します。完成した文字列が print() への単一の引数であるため、区切り文字は現れません。
x = 10
print('The number of mangoes I have is "{}"'.format(x))
出力:
The number of mangoes I have is "10"
{} プレースホルダーは二重引用符の中にあり、文字列が表示されるときに x の値に置換されます。新しいコードでは、古い % 演算子よりも str.format() が推奨されます。
文字列連結を使用して、Python で値の間にスペースを入れずに出力する
+ 演算子、つまり文字列連結演算子は、文字列を端から端まで結合し、その間に何も追加しません。そのため、カンマ区切りの直接的な代替手段となります。
x = 10
print('The number of mangoes I have is "' + str(x) + '"')
出力:
The number of mangoes I have is "10"
連結は文字列間でのみ機能するため、整数 x はまず str() で変換されます。その後、各部分は 1 つの文字列 — 'The number of mangoes I have is "'、'10'、'"' — を形成し、print() はそれをそのまま出力します。
文字列書式に f-string を使用して、Python で値の間にスペースを入れずに出力する
Python 3.6 では f 文字列が導入され、式を文字列リテラル内に直接埋め込むことができます。値は文字列が構築される際に評価されるため、上記の他の 2 つの書式方法よりも高速でもあります。
x = 10
print(f'The number of mangoes I have is "{x}"')
出力:
The number of mangoes I have is "10"
文字列の前の f プレフィックスにより、それは f 文字列になり、その中の {x} はコードが実行されるときに x の値に置換されます。変数がそのテキストが現れるべき場所に正確に位置するため、結果は簡潔で読みやすく、余分なスペースがありません。
print ステートメントの sep パラメーターを使用して、Python で値の間にスペースを入れずに出力する
カンマ区切りの引数を維持したい場合は、print() がそれらの間に何を置くかを変更してください。Python 3 で使用できる sep パラメーターは、引数の間に挿入される区切り文字であり、デフォルトは単一のスペースです。
x = 10
print('The number of mangoes I have is "', x, '"', sep="")
出力:
The number of mangoes I have is "10"
sep を空文字列 "" に設定すると、print() は各部分 — 開き引用符までのテキスト、x の値、閉じ引用符 — を、その間に何も入れずに結合します。これは元のカンマ形式に対する最小の変更です。引数は同じままで、区切り文字だけが取り除かれます。
Template 文字列を使用した文字列補間により、Python で値の間にスペースを入れずに出力する
Python の string.Template クラスは、テンプレート文字列に値を補間します。$ で始まるプレースホルダーは、提供した値で置換され、その周囲には何も追加されません。
from string import Template
x = 10
template = Template('The number of mangoes I have is "$x"')
result = template.substitute(x=x)
print(result)
出力:
The number of mangoes I have is "10"
ここで、$x は x の値のプレースホルダーです。template.substitute(x=x) を呼び出すと、それは 10 に置換され、print(result) は完成した文字列を正確に — The number of mangoes I have is "10" と、引用符やスペースを追加せずに — 出力します。Template 文字列は、その置換ルールが意図的にシンプルであるため、テンプレート自体がユーザーやファイルから来る場合に最もよく使用されます。
結論
元の例のスペースは print() 自体に由来します。カンマ区切りの引数では、デフォルトで 1 つのスペースである sep 区切り文字が挿入されます。それらを取り除くには、区切り文字を変更する(sep="")、出力前に文字列全体を構築する(f 文字列、str.format()、% 演算子、連結、または string.Template を使用)、あるいは両方のアイデアを組み合わせます。日常のコードでは f 文字列が最も読みやすい選択肢であり、sep="" は引数がすでに揃っている場合の最も速い修正です。