Python で列を揃えて印刷する

Manav Narula 2025年2月22日 Python Python Print
  1. %フォーマットを使用して列を揃える
  2. format() を使用して列を揃える
  3. f-strings を使用して列を揃える
  4. expandtabs() を使用して列を揃える
  5. ljust() を使用して左揃えする
  6. tabulate を使用して列を揃える
  7. pandas を使用して列を揃える
  8. 結論
Python で列を揃えて印刷する

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 が最適です。構造化された表形式データには、tabulatepandas が自動フォーマットを提供し、一貫した揃えを保証します。行列を扱う場合は、Python で行列を出力する方法をチェックして、より構造化された出力技術を学ぶことができます。適切な方法を選択するには、データの複雑さと出力要件に依存します。

チュートリアルを楽しんでいますか? <a href="https://www.youtube.com/@delftstack/?sub_confirmation=1" style="color: #a94442; font-weight: bold; text-decoration: underline;">DelftStackをチャンネル登録</a> して、高品質な動画ガイドをさらに制作するためのサポートをお願いします。 Subscribe
著者: Manav Narula
Manav Narula avatar Manav Narula avatar

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

関連記事 - Python Print