さらに続く。今日で終わりだ。
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')