さらに続く。今日で終わりだ。
cf. http://docs.python.jp/2.7/library/itertools.html
組合せジェネレータ
itertools.product は入れ子のループと同じ。
>>> for x in itertools.product('ABC', 'abc'):
... print x
...
('A', 'a')
('A', 'b')
('A', 'c')
('B', 'a')
('B', 'b')
('B', 'c')
('C', 'a')
('C', 'b')
('C', 'c')
名前つき引数 repeat を与えると、その回数の引数が与えられたのと同じになる。
>>> for x in itertools.product('ABC', 'abc', repeat = 2):
... print x
...
('A', 'a', 'A', 'a')
('A', 'a', 'A', 'b')
('A', 'a', 'A', 'c')
('A', 'a', 'B', 'a')
('A', 'a', 'B', 'b')
('A', 'a', 'B', 'c')
('A', 'a', 'C', 'a')
('A', 'a', 'C', 'b')
('A', 'a', 'C', 'c')
('A', 'b', 'A', 'a')
('A', 'b', 'A', 'b')
('A', 'b', 'A', 'c')
('A', 'b', 'B', 'a')
('A', 'b', 'B', 'b')
('A', 'b', 'B', 'c')
('A', 'b', 'C', 'a')
('A', 'b', 'C', 'b')
('A', 'b', 'C', 'c')
('A', 'c', 'A', 'a')
('A', 'c', 'A', 'b')
('A', 'c', 'A', 'c')
('A', 'c', 'B', 'a')
('A', 'c', 'B', 'b')
('A', 'c', 'B', 'c')
('A', 'c', 'C', 'a')
('A', 'c', 'C', 'b')
('A', 'c', 'C', 'c')
('B', 'a', 'A', 'a')
('B', 'a', 'A', 'b')
('B', 'a', 'A', 'c')
('B', 'a', 'B', 'a')
('B', 'a', 'B', 'b')
('B', 'a', 'B', 'c')
('B', 'a', 'C', 'a')
('B', 'a', 'C', 'b')
('B', 'a', 'C', 'c')
('B', 'b', 'A', 'a')
('B', 'b', 'A', 'b')
('B', 'b', 'A', 'c')
('B', 'b', 'B', 'a')
('B', 'b', 'B', 'b')
('B', 'b', 'B', 'c')
('B', 'b', 'C', 'a')
('B', 'b', 'C', 'b')
('B', 'b', 'C', 'c')
('B', 'c', 'A', 'a')
('B', 'c', 'A', 'b')
('B', 'c', 'A', 'c')
('B', 'c', 'B', 'a')
('B', 'c', 'B', 'b')
('B', 'c', 'B', 'c')
('B', 'c', 'C', 'a')
('B', 'c', 'C', 'b')
('B', 'c', 'C', 'c')
('C', 'a', 'A', 'a')
('C', 'a', 'A', 'b')
('C', 'a', 'A', 'c')
('C', 'a', 'B', 'a')
('C', 'a', 'B', 'b')
('C', 'a', 'B', 'c')
('C', 'a', 'C', 'a')
('C', 'a', 'C', 'b')
('C', 'a', 'C', 'c')
('C', 'b', 'A', 'a')
('C', 'b', 'A', 'b')
('C', 'b', 'A', 'c')
('C', 'b', 'B', 'a')
('C', 'b', 'B', 'b')
('C', 'b', 'B', 'c')
('C', 'b', 'C', 'a')
('C', 'b', 'C', 'b')
('C', 'b', 'C', 'c')
('C', 'c', 'A', 'a')
('C', 'c', 'A', 'b')
('C', 'c', 'A', 'c')
('C', 'c', 'B', 'a')
('C', 'c', 'B', 'b')
('C', 'c', 'B', 'c')
('C', 'c', 'C', 'a')
('C', 'c', 'C', 'b')
('C', 'c', 'C', 'c')
itertools.permutations は繰り返しを許さない順列、itertools.combinations は繰り返しを許さない組み合わせ。この2つはこの間書いたので省略。
itertools.combinations_with_replacement は繰り返しを許した組み合わせ。
>>> for x in itertools.combinations_with_replacement('ABCD', 2):
... print x
...
('A', 'A')
('A', 'B')
('A', 'C')
('A', 'D')
('B', 'B')
('B', 'C')
('B', 'D')
('C', 'C')
('C', 'D')
('D', 'D')