itertools モジュール(4)

さらに続く。今日で終わりだ。

 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')