プログラミンコンテストでは、様々な組み合わせの中から最適なものを選ぶような問題が出題されることが多々あります。ここでは、与えられたリストの中から得られる、すべての組み合わせを列挙する方法を紹介します。

組み合わせとは?

 はじめに、“組み合わせ”について確認します。 組み合わせ とは、「異なる n 個の中から、異なる r 個を取り出す」ものです。そして組み合わせは、並べる順番を考慮しないことに“順列”との違いがあります。

python3での実装例

 それでは実際に、python3で実装してみます。

import itertools

mylist = [1, 2, 3, 4, 5]

comb_list = list(itertools.combinations(mylist, 4))

print(comb_list)
# --> [(1, 2, 3, 4), (1, 2, 3, 5), (1, 2, 4, 5), (1, 3, 4, 5), (2, 3, 4, 5)]

 1行目で “itetoolsモジュール”をimportしています。これにより、簡単に組み合わせを生成できるようになります。

 今回は3つの要素(1, 2, 3, 4, 5)を持つ “mylist” を元に組み合わせを生成しています。

 5行目の itertools.combinations(mylist, 4) が組み合わせを生成している部分です。 itertools.combinations( ) は引数として、選択対象となるlist(や set等)と選び出す数が必要です。この例では、list としてmylistを、選び出す数として 4 を与えています。
またそれを list( ) としていますが、これがなければ表示は <itertools.combinations object at 0x7f09503bc098>  といった感じで表示されます。

 最後に、生成される組み合わせは、タプルで返されている点に注意して下さい。