Python で列を揃えて印刷する
-
%
フォーマットを使用して列を揃える -
format()
を使用して列を揃える - f-strings を使用して列を揃える
-
expandtabs()
を使用して列を揃える -
ljust()
を使用して左揃えする -
tabulate
を使用して列を揃える -
pandas
を使用して列を揃える - 結論

print()
関数は、Python 2 ではステートメントでしたが、Python 3 では関数に進化しました。出力を正しくフォーマットすることは、特に表形式のデータを扱う際に明確さを確保するために重要です。このチュートリアルでは、Python で列を揃えて出力するためのさまざまな方法を探ります。複数の引数を効率的に出力しつつ列を揃える必要がある場合は、Python で複数の引数を出力する方法のガイドを参照してください。
%
フォーマットを使用して列を揃える
%
フォーマットは、最も古い文字列フォーマット方法の 1つです。%-*s
を使用して、列幅として機能するスペースを定義できます。各行のスペースを手動で調整する必要があります。
例:
print("First Name: %-*s Last Name: %s" % (13, "Jim", "Clark"))
print("Age: %-*s Website: %s" % (20, "42", "DelftStack.com"))
出力:
First Name: Jim Last Name: Clark
Age: 42 Website: DelftStack.com
このアプローチは基本的な揃えを提供しますが、スペースの調整に注意が必要です。%
演算子は、%-*s
を使用して実行時に決定される幅を動的に指定できます。ただし、各値に対して手動でスペースを調整する必要があるため、新しいフォーマット手法に比べて柔軟性が低いです。
format()
を使用して列を揃える
format()
関数は、列内のテキストを揃えるためのより柔軟な方法を提供します。中括弧内に固定幅のスペースを定義することで、一貫した列揃えを確保できます。
例:
print("{:<10} {:<5} {:<15}".format("First Name:", "Jim", "Last Name: Clark"))
print("{:<10} {:<5} {:<15}".format("Age:", "42", "Website: DelftStack.com"))
出力:
First Name: Jim Last Name: Clark
Age: 42 Website: DelftStack.com
{:<10} {:<5} {:<15}
を使用して、固定幅のフィールドを指定し、テキストを構造化された方法で揃えます。この方法は、テキストの長さに関係なく、適切にフォーマットされることを保証します。
数値のフォーマットと列揃えを同時に行う必要がある場合は、Python で数値にカンマを付けてフォーマットする方法のガイドが役立つかもしれません。
f-strings を使用して列を揃える
Python 3.6 で導入された f-strings は、テキストをフォーマットするための簡潔で読みやすい方法を提供し、揃えの指定もサポートしています。
例:
print(f"{'First Name: ' + 'Jim':<25} Last Name: {'Clark'}")
print(f"{'Age: ' + '42':<25} Website: {'DelftStack.com'}")
出力:
First Name: Jim Last Name: Clark
Age: 42 Website: DelftStack.com
f-strings は、テキストをフォーマットするための直感的なアプローチを提供し、冗長性を減らします。この方法は、format()
と同様に揃えをサポートし、:<
、:>
、:^
を使用してそれぞれ左揃え、右揃え、中央揃えを行います。f-strings は実行時に評価されるため、効率的で読みやすく、列揃えに最適な選択肢です。
expandtabs()
を使用して列を揃える
タブ(\t
)を使用して出力を構造化し、expandtabs()
を使用してタブ幅を明示的に制御することで、スペースを動的に調整できます。
例:
print(("First Name: Jim" + "\t" + "Last Name: Clark").expandtabs(13))
print(("Age: 42" + "\t" + "Website: DelftStack.com").expandtabs(26))
出力:
First Name: Jim Last Name: Clark
Age: 42 Website: DelftStack.com
この方法は、タブ区切り値(TSV
)を扱う場合に便利ですが、タブ幅はターミナルの設定に依存するため、expandtabs()
は異なる環境で一貫した結果を生成しない場合があります。
ljust()
を使用して左揃えする
Python は、テキストの揃えのために ljust()
、rjust()
、center()
メソッドを提供します。ljust()
メソッドは、固定幅内で左揃えを保証します。文字列のパディング技術について詳しく知りたい場合は、Python で文字列をスペースでパディングする方法をチェックしてください。
例:
print("First Name: Jim".ljust(40) + "Last Name: Clark")
print("Age: 42".ljust(40) + "Website: DelftStack.com")
出力:
First Name: Jim Last Name: Clark
Age: 42 Website: DelftStack.com
ljust(40)
を使用して、各文字列にスペースを追加し、一貫した列幅を確保します。
tabulate
を使用して列を揃える
tabulate
モジュールは、構造化されたデータを整列した列にフォーマットする簡単な方法を提供します。特に、各行の揃えを手動で調整せずに一貫したスペースを必要とする表形式のデータに便利です。
tabulate
を使用するには、まずインストールする必要があります。以下のコマンドでインストールできます:
pip install tabulate
インストール後、tabulate
は適切な列幅を自動的に決定し、出力をきれいにフォーマットします。tablefmt="plain"
を使用することで、不要な表の枠線を追加せずに、テキストベースの環境でシンプルで読みやすい出力を確保します。
例:
from tabulate import tabulate
data = [["First Name:", "Jim", "Last Name: Clark"],
["Age:", "42", "Website: DelftStack.com"]]
print(tabulate(data, tablefmt="plain"))
出力:
First Name: Jim Last Name: Clark
Age: 42 Website: DelftStack.com
pandas
を使用して列を揃える
大規模なデータセットを扱う場合、pandas ライブラリは、表形式のデータを効率的にフォーマットして揃える構造化された方法を提供します。構造化データを扱う場合、効率的な処理のためにリストを Pandas DataFrame に変換する方法も必要になるかもしれません。手動のフォーマットとは異なり、pandas はデータセットのサイズに関係なく、一貫した列揃えを保証します。
例:
import pandas as pd
# 列幅を固定して DataFrame を作成し、揃えを改善
data = {"Column 1": ["First Name:", "Age:"],
"Column 2": ["Jim", "42"],
"Column 3": ["Last Name: Clark", "Website: DelftStack.com"]}
df = pd.DataFrame(data)
# 列幅を調整して揃えを改善
col_width = max(df.applymap(lambda x: len(str(x))).max()) + 2
df_aligned = df.applymap(lambda x: str(x).ljust(col_width))
print(df_aligned.to_string(index=False, header=False))
最大列幅の計算
col_width = max(df.applymap(lambda x: len(str(x))).max()) + 2
- このステップにより、データセット内の最長の文字列長を決定し、列全体で均一なスペースを確保します。
applymap()
関数は、DataFrame 内のすべての値にlen(str(x))
を適用し、文字列の長さを正しく計算します。max()
関数は最大値を抽出し、+2
で読みやすさのために追加のパディングを加えます。
各セルに左揃えを適用
df_aligned = df.applymap(lambda x: str(x).ljust(col_width))
applymap()
関数を再度使用し、今回は各値にljust(col_width)
を適用します。ljust(col_width)
は、すべての値が均一な列幅内で左揃えされることを保証し、ずれを防ぎます。
テーブルをプレーンテキストとして出力
print(df_aligned.to_string(index=False, header=False))
to_string(index=False, header=False)
は、DataFrame のインデックスとヘッダーを削除し、クリーンで列揃えされた出力を作成します。
結論
Python では、列を揃えて出力するための複数の方法があります。以下は、説明した方法の比較です:
メソッド | 柔軟性 | 可読性 | 最適な使用例 |
---|---|---|---|
% フォーマット |
低い | 中程度 | 固定幅の単純なケース |
format() |
高い | 高い | 汎用的なフォーマット |
f-strings | 高い | 非常に高い | 読みやすく効率的なフォーマット |
expandtabs() |
中程度 | 低い | タブベースの揃え |
ljust() |
中程度 | 高い | 左揃えを保証する場合 |
tabulate |
高い | 非常に高い | 構造化されたテキストテーブルのフォーマット |
pandas |
高い | 高い | 大規模なデータセットの処理 |
各メソッドには独自の利点があります:
format()
と f-strings は柔軟性と可読性を提供し、汎用的なテキストフォーマットに最適です。expandtabs()
は、タブ区切り値を揃える場合に便利ですが、ターミナルの設定に依存するため、揃えが一貫しない場合があります。ljust()
は、フォーマット要件が最小限の場合に、テキストを左揃えする簡単な方法を提供します。tabulate
は、最小限の労力で構造化されたテーブルを生成するのに優れています。pandas
は、大規模なデータセットを扱う場合に、手動の調整なしで構造化された揃えを必要とする場合に最適です。
基本的なテキストフォーマットには、format()
または f-strings が最適です。構造化された表形式データには、tabulate
と pandas
が自動フォーマットを提供し、一貫した揃えを保証します。行列を扱う場合は、Python で行列を出力する方法をチェックして、より構造化された出力技術を学ぶことができます。適切な方法を選択するには、データの複雑さと出力要件に依存します。
Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.
LinkedIn