Python プログラミング

🔁Pythonでの二重ループ・三重ループ・四重ループの書き方|計算量に要注意!

Pythonで「二重ループ(ネストされたfor文)」を書くことは、競技プログラミングやデータ処理において日常茶飯事です。
しかし、三重ループや四重ループになると、計算量の影響や可読性の低下に注意が必要です。

この記事では、Pythonでの2重ループ、3重ループ、4重ループの書き方を実例付きで解説し、計算量の重要性や実戦での使い分けの注意点についても触れます。


✅ Pythonの二重ループの書き方(2重for文)

2重ループは、2次元配列の処理すべてのペアの比較などで頻出です。

# 3x3 の表を出力
for i in range(3):
    for j in range(3):
        print(f"i={i}, j={j}")

出力例:

i=0, j=0
i=0, j=1
i=0, j=2
i=1, j=0
...

✅ Pythonの三重ループの書き方(3重for文)

3重ループは、3次元データの処理3つの要素の組み合わせ探索などに使われます。

# 3×3×3 の空間を探索
for i in range(3):
    for j in range(3):
        for k in range(3):
            print(f"i={i}, j={j}, k={k}")

計算量:O(N^3) となるため、Nが大きくなると極端に遅くなります(例えば N=100 なら 1,000,000 回ループ)。


✅ Pythonの四重ループの書き方(4重for文)

4重ループは、非常に重い処理になるため、競技プログラミングでは よほどの理由がない限り避けられます

# 2×2×2×2 の空間
for i in range(2):
    for j in range(2):
        for k in range(2):
            for l in range(2):
                print(f"i={i}, j={j}, k={k}, l={l}")

✅ 出力回数:16回(2×2×2×2)

⚠ 実戦では:

  • O(N^4) になるため、N=50625万回のループになります。
  • TLE(時間切れ) になる可能性が高いため、別の方法(DP、累積和、メモ化)を考えるのが基本です。

🧠 実戦では「計算量」の見積もりが重要!

多重ループを書く際には、計算量を意識するクセをつけましょう。

重さ計算量適切な N の目安(1秒以内)
2重ループO(N^2)N ≦ 1000〜2000
3重ループO(N^3)N ≦ 200〜300
4重ループO(N^4)N ≦ 50 以下推奨(場合により不可)

❗ 4次元配列を使う機会はほとんどない?

実務や競プロでは、4次元配列をそのまま扱うケースはかなり稀です。

  • 実用的には3次元までで十分なケースがほとんど
  • 多次元配列はメモリ使用量可読性の問題が大きく、代替手段があるならそちらを優先すべき

例:不要な次元をflattenして1〜2次元に圧縮することが多い


📌 リスト内包表記で2重配列を初期化する例

H, W = 3, 4
grid = [[0]*W for _ in range(H)]

この形式なら、2重ループでアクセスできます:

for i in range(H):
    for j in range(W):
        grid[i][j] = i + j

🔍 まとめ:多重ループは書けるが、使いすぎ注意!

ループの深さ用途例注意点
2重ループ二次元配列、全ペア探索通常使用可
3重ループ組み合わせ、3次元空間Nに注意
4重ループレア。DPなど一部例外原則避ける。要最適化
4次元配列ほぼ使わないメモリ・設計的に非推奨

🔎 関連キーワード

  • Python 二重ループ 書き方
  • Python 3重ループ for文
  • Python 4重ループ 実行速度
  • Python 多重ループ 計算量
  • Python 多次元配列 初期化

💬 最後に

Pythonに限った話ではりませんが多重ループは強力な武器ともなる手法ではありますが、ループが深くなるほど計算量が爆発的に増加します。

 
アルゴリズムの工夫や、別のデータ構造(set, dict, DPなど)を活用することで、より効率的な解法を目指すべきだと個人的には考えております。


-Python, プログラミング

Copyright© donguri.pyのblog , 2025 All Rights Reserved.