【Python】itertools.combinations()による[組み合わせ]の実装
今回も個人的な備忘録。
良く数学の問題で出てくる「AとBとCとDとEから3個取り出す組み合わせを求めよ」というような問題をPythonで計算するには、[itertools.combinations()]を使うのがとても手っ取り早くて良い。
例: demo1.py
#!/usr/bin/python import itertools data = ["A", "B", "C", "D", "E"] patterns = itertools.combinations(data, 3) for pattern in patterns: print(pattern)
上記コードを実行すると以下が出力される。
('A', 'B', 'C') ('A', 'B', 'D') ('A', 'B', 'E') ('A', 'C', 'D') ('A', 'C', 'E') ('A', 'D', 'E') ('B', 'C', 'D') ('B', 'C', 'E') ('B', 'D', 'E') ('C', 'D', 'E')
つまりは、[patterns]には[5C3]の組み合わせが格納されていることがわかる。
さらに[「A, A, A, A, B, C」の中から3つ取り出す際にAの重複を排除する]ような場合には、以下の様に[set()]を使用すると良い。
例: Demo2.py
#!/usr/bin/python import itertools data = ["A", "A", "A", "A", "B", "C"] patterns = itertools.permutations(set(data), 3) for pattern in patterns: print(pattern)
上記コードを実行すると以下が出力される。
('C', 'B', 'A') ('C', 'A', 'B') ('B', 'C', 'A') ('B', 'A', 'C') ('A', 'C', 'B') ('A', 'B', 'C')
ちなみに[組み合わせ]ではなく[順列]を求めたい場合には[itertools.permutations()]を使う。