Unknown Region

プログラムでハマったエラーとその解決方法についての備忘録メモ

【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()]を使う。

 

連絡先: plugout777★yahoo.co.jp (クローラー対策のため★を@に変更してください)