ブルーの趣味Log

日々の備忘録

【Python】多重forループを避けるには?

久しぶりのPythonネタ

大量のCSVデータを処理したりしていると、陥りがちなのが多重forループ。

for i in range(10):
  for j in range(10):
    for k in range(10):
      for l in range(10):
        for m in range(10):
          for n in range(10):
            ・・・

多重forループの欠点を上げると、とにかく見づらい。

Pythonは処理範囲を括弧ではなく、インデントで表現するので、どんどん画面右にずれていきます。

これがノートPCで作業しないといけない場面で、非常に見づらいのです。


何か良い方法はないか?

やはりみんな悩むところは同じらしく、

ネットで調べてみると、いろいろな方法が挙げられています。

その中で最も気になったのがitertoolsを使う方法です。

itertools

使ったことがなかったのですが、python標準のモジュールで追加で何かをインストールする必要はありません。

itertoolsを使うとこんな感じに書けます。

import itertools

all_nums = itertools.product(range(2),range(3),range(4))

for i in all_nums:
    print(i)    

-----
(0, 0, 0)
(0, 0, 1)
(0, 0, 2)
(0, 0, 3)
(0, 1, 0)
(0, 1, 1)
(0, 1, 2)
(0, 1, 3)
(0, 2, 0)
(0, 2, 1)
(0, 2, 2)
(0, 2, 3)
(1, 0, 0)
(1, 0, 1)
(1, 0, 2)
(1, 0, 3)
(1, 1, 0)
(1, 1, 1)
(1, 1, 2)
(1, 1, 3)
(1, 2, 0)
(1, 2, 1)
(1, 2, 2)
(1, 2, 3)


お~~~♪すっきり。