今日、ある用途で書き捨てスクリプトを書いてて、その中で2種類のリストの全組み合わせを出力するってケースがありました。
「こういうときはitertoolsの、、、なんだっけ?」って感じになって、productを思い出せなかったので、書き捨てスクリプトですし、その場は以下のように入れ子ループで終わらせました。
a_list = [1, 2, 3] b_list = [4, 5, 6] for a in a_list: for b in b_list: print a, b
forの入れ子がなんともイマイチですね。
itertools.productを使うとこうです。
import itertools for a, b in itertools.product(a_list, b_list): print a, b
よし、ブログに書いたからもう忘れない。
これだけだとあまりなんでrubyだとどう書くかも書いてみよう。
最近ruby書く機会がなくてどんどん忘れてる。
[1,2,3].product([4,5,6]).each do |e| p e end
結果
[1, 4] [1, 5] [1, 6] [2, 4] [2, 5] [2, 6] [3, 4] [3, 5] [3, 6]
参考: 9.7. itertools ― 効率的なループ実行のためのイテレータ生成関数 ― Python 2.6ja2 documentation
参考: Class: Array (Ruby 1.9.3)