HOWTO · Python

Python で角括弧なしでリストを出力する

このチュートリアルでは、Python で角括弧を使わずにリストを出力する方法を示します。

このページの内容

角括弧を付けずにPythonのリストを表示するには、展開して各要素を出力する、文字列要素を区切り文字で結合する、ループで項目ごとに書式を整える方法があります。出力するだけならprint()を使い、保存したり別の場所に渡したりする文字列が必要ならjoin()を使います。以下の例で、それぞれの方法による出力を確認できます。

次の例を実行します。

このセクションのコードと表示されるラベルや出力は英語のままです。

items = ["x", "y", "z"]
print(*items, sep=",")
x,y,z

文字列のリストにはjoin()を使う

区切り文字となる文字列にjoin()を呼び出します。入力された文字列の間に区切り文字を挟んだ、1つの文字列が返されます。整形した結果を変数に代入したり、ほかのテキストと結合したり、後で書き出したりする場合に便利です。

このセクションのコードと表示されるラベルや出力は英語のままです。

items = ["red", "green", "blue"]
result = ", ".join(items)
print(result)
red, green, blue

各要素はあらかじめ文字列である必要があります。リストに整数などの文字列以外の値が含まれていると、join()はTypeErrorを発生させます。下の例のように、先に要素を変換してください。空のリストを結合すると空文字列になり、要素が1つだけなら結果に区切り文字は入りません。例のred、green、blueは英語のままです。

値の型が混在する場合はprint()に展開して渡す

*演算子は、反復可能なオブジェクトの要素を個別の位置引数に展開します。print()は異なる型の値を受け取り、それぞれを表示用の文字列に変換します。sep引数で引数間に挿入する文字列を指定でき、省略時の区切り文字は半角スペースです。

このセクションのコードと表示されるラベルや出力は英語のままです。

values = [1, "two", 3.0, True]
print(*values, sep=" | ")
1 | two | 3.0 | True

この方法は標準出力に直接書き出すため、再利用できる結合済みの文字列は作成しません。空のリストを展開すると値は渡されず、print()が出力するのは末尾の改行だけです。値を続けて並べるにはsep=""を使い、空白が適切なら既定値のままにします。例の文字列値twoと、出力に含まれるTrueは英語表記のままです。

結合する前に値を文字列に変換する

数値などから文字列の結果を作る場合は、map(str, values)またはリスト内包表記を使って各項目を明示的に変換します。これにより区切り文字を自由に選べます。変換には各値のstr()形式が使われます。これは読みやすいテキストを目的としているため、元の型の情報が保たれるとは限りません。

このセクションのコードと表示されるラベルや出力は英語のままです。

numbers = [1, 2, 3]
result = ",".join(map(str, numbers))
print(result)
1,2,3

値の変換に加えて加工や絞り込みも行う場合は、リスト内包表記が便利です。例:", ".join(str(value) for value in numbers)。どちらの方法でも元のリストは変更されず、表示用の文字列が作成されます。

手早く表示するにはstr()のスライスを使う

リストにstr()を呼び出すと、外側の角括弧を含むPython表現が得られます。手早く表示するには、[1:-1]でその表現の先頭と末尾の文字を取り除きます。

このセクションのコードと表示されるラベルや出力は英語のままです。

items = [1, 2, 3]
print(str(items)[1:-1])
1, 2, 3

この方法では、文字列要素を囲む引用符や、入れ子になったリストの角括弧など、表現の詳細がそのまま残ります。簡単な確認には便利ですが、汎用の書式設定方法でもシリアライズ形式でもありません。区切り文字を指定し、要素の表示形式を予測可能にしたい場合は、変換した値を結合してください。

項目ごとに書式を整えるにはループで出力する

項目ごとに書式を変えたい場合や、各項目の後に何を出力するか制御したい場合は、ループを使います。print()は通常、呼び出しごとに改行で終わります。endを設定すると末尾の出力を変更できます。項目を1つずつ出力する際は、endに区切り文字を含めます。

このセクションのコードと表示されるラベルや出力は英語のままです。

items = [1, 2, 3]
for index, item in enumerate(items):
    if index:
        print(" ", end="")
    print(item, end="")
print()
1 2 3

ループでは項目の間だけに区切り文字を出力し、最後にprint()を呼び出して末尾の改行を付けます。これにより余分な末尾の空白を避け、表示する行を正確に整えられます。ループは標準出力に順次書き出すため、1回の処理で済ませたい場合や再利用できる文字列が必要な場合は、展開または結合を選びます。項目ごとに異なる書式を適用するには、ループ内でテキストを組み立てるか、書式設定した値をprint()に渡します。