pythonのitertools.product

今日、ある用途で書き捨てスクリプトを書いてて、その中で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)