プログラミンコンテストでは、順列に関する出題が多々あります。ここでは、その順列を列挙する方法を紹介します。
順列とは?
はじめに、“順列”について確認します。順列とは、「異なる n 個の中から r 個を取り出して1列に並べたもの」です。そして順列は、並べる順番を考慮することに“組合せ”との違いがあります。
python3での実装例
それでは実際に、python3で実装してみます。
import itertools
mylist = [1, 2, 3]
print(list(itertools.permutations(mylist)))
# --> [(1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1)]
print(list(itertools.permutations(mylist,2)))
# --> [(1, 2), (1, 3), (2, 1), (2, 3), (3, 1), (3, 2)]
1行目で “itetoolsモジュール”をimportしています。これにより、簡単に順列を生成できるようになります。今回は3つの要素(1, 2, 3)を持つ “mylist” を元に順列を生成しています。
5行目の itertools.permutations(mylist) が順列を生成している部分です。またそれを list( ) としていますが、これがなければ表示は <itertools.permutations object at 0x7fcba139b468>
といった感じで表示されます。
さらに8行目では、5行目の命令に引数をもう一つ、2 として与えています。これにより、生成される順列の長さが 2つ になっています。引数がなければ生成される順列の長さは、元の配列の長さと同じになる訳です。
最後に、生成される順列はタプルで返されている点に注意して下さい。